机器数据分析平台

  • 机器数据分析平台 > 产品手册 > SPL参考手册 > 字段处理 >bin

    bin

    最近更新时间:2020-02-27 12:27:20

    bin 命令用于将离散数据进行分组,将连续数值放入离散集合或数据桶中。bin 命令主要有两种用法:

    1. 对时序数据分桶,按照指定的时间间隔,将时序数据分成若干时间段。

      示例:将日志按照五分钟(span=5m)进行分桶,结果是将类似 2020-01-14 21:41:12这样的原始数据对齐到2020-01-14 21:40:00 。具体用法见下文。

    2. 对数值数据分桶,按照指定的间隔,将数值数据分隔成若干个数据分组。

      示例:将数值数据,按照从取值范围在0-3000,每1000的数据区间作为一个分组,那么数值 100, 1001, 2193,分别会被规整到 0-1000, 1000-2000, 2000-3000 这三个区间上。具体用法见下文。

    下面具体讲解 bin 命令语法和参数。

    语法:

    bin <field> [as <newfield>] [options]
    

    参数说明:

    必填参数:

    • field:指定分桶的字段。

    可选参数:

    • options: options 中支持以下参数:

      • bins= <N>:设置分桶数量。如 N=10 代表将数据分为10个分组。

      • span=<N>:设置分桶间隔。

        • 对于数值字段,N 为整数;

        • 对于时间字段,N 为时间间隔,如 1s,1m,1h,支持毫秒(ms),秒(s),分钟(m),小时(h),天(d),周(w),月(M),季度(q),年(y)。例如对时间字段按照五分钟(span=5m)进行规整,结果是将类似 2020-01-14 21:41:12这样的原始数据对齐到2020-01-14 21:40:00

      • start=<N>:对数值类型的字段进行分桶时,设置取值范围的最小值。

      • end=<N>:对数值类型的字段进行分桶时,设置取值范围的最大值。如 bin size bins =4 start=100 end=200即对取值范围是 100~200 的数据进行分桶。

        • 使⽤ start 和 end 参数可以扩展取值范围,⽽不能缩减取值范围。即 start 参数须小于默认取值范围最小值,end 参数须大于默认取值范围最大值。例如,假如您要进行分桶的字段默认数值范围在0-59之间。
          例1: 不指定 strat 和 end 参数,……|……span=10 的结果是按0-10、10-20、20-30的间隔对0-59之间的数值分桶,依此类推。

          例2:但指定end = 1000,则将根据实际的开始值和1000作为结束值(start=0,end=1000)来计算分桶。

        • 对于数值字段,start 和 end 默认是 [min(field), max(field)]。

        • 对于时间字段,start 和 end 默认是查询时指定的时间范围。

        注意:

        1.若只指定 bins 参数

        • 对数值类型的字段,span 的计算方法是大于 (end-start)/bins,向上取整。例如,bin size bins =6对取值范围是0~59的数据进行分桶,(59-0)/6=9.833,向上取整的值为10,所以会按照10的间隔对数据分桶。

        • 对时间类型的字段,span 的计算方法是大于 (end-start)/bins,向上取整,举例来说,您的数据中有三个时间戳,分别是2020-01-14 12:00:00,2020-01-14 12:10:00,2020-01-14 12:50:00 ,bin time bins=3,选择时间范围为2020-01-14 12:00:00 至 2020-01-14 13:00:00 (设置真实的start和end参数),结果是按照20mins的时间间隔对时间范围进行分桶,将这三个时间戳分别对齐(向下对齐)到2020-01-14 12:00:00,2020-01-14 12:00:00,2020-01-14 12:40:00

        2.若 span 和 bins 参数均没有指定:默认 bins=100。

        3.若同时指定 span 参数和 bins 参数,优先使用 span 参数计算。

      • align=<true|false>:

        • 对数值字段来说,可通过align=<true|false>设置是否将桶值对齐到 5 的倍数,默认值为false。

          举例来说,如bin size bins =8对取值范围是0~59的数据进行分桶,(59-2)/8=7.125,span 计算出来的值应为大于7.125且向上取整,是8,所以实际上会按照 8 的间隔对数值分桶,分桶情况0-8、8-16、16-24,以此类推。而bin size bins =8 align=true的效果是:分桶情况0-10、10-20、20-30,以此类推。
          
        • 对时间字段来说,系统提供1s, 5s, 10s, 15s, 30s, 1m, 5m, 10m, 15m, 30m, 1h, 6h, 12h, 1d, 7d,1M的对齐粒度。下面用示例讲解如何匹配系统提供的对齐粒度。

          例1,假如您的数据中有三个时间戳,分别是2020-01-14 12:00:00,2020-01-14 12:10:00,2020-01-14 12:50:00 ,bin time span=20m ,选择时间范围为2020-01-14 12:00:00 至 2020-01-14 13:00:00 (设置真实的start和end参数),结果是将时间戳对齐到2020-01-14 12:00:00,2020-01-14 12:00:00,2020-01-14 12:40:00,而`bin time span=20m align=true,大于(end-start)=60mins的系统提供的最小时间粒度是6h,在这个例子里匹配到的是6h的粒度。所以12:00到18:00 的所有时间点都对齐到12:00。
          

    用法示例:

    返回每 5 分钟间隔内当前主机的平均 cpu。(时间分桶)

    ……| bin _time span=5m | stats avg(cpu) by _time
    

    按照1s间隔统计响应时间在0到10s之间的日志计数。(数值分桶)

    ……| bin responsetime span=1 start=0 end=10 | stats count()  as cnt by responsetime
    

    统计从50-100分每10分1个成绩区间的学生成绩。

    ……| bin grade bins=5 start=50 end=100| stats count() by grade
    

    以上内容是否对您有帮助?
  • Qvm free helper
    Close