移动百分位聚合编辑

给定一个有序的 百分位 数列,移动百分位聚合将在这些百分位上滑动一个窗口,并允许用户计算累积百分位。

这在概念上与 移动函数 管道聚合非常相似,只是它作用于百分位草图而不是实际的桶值。

语法编辑

一个 moving_percentiles 聚合单独来看是这样的

{
  "moving_percentiles": {
    "buckets_path": "the_percentile",
    "window": 10
  }
}

表 74. moving_percentiles 参数

参数名称 描述 必需 默认值

buckets_path

感兴趣的百分位的路径(有关更多详细信息,请参阅 buckets_path 语法

必需

window

在直方图上“滑动”的窗口大小。

必需

shift

窗口位置的偏移量

可选

0

moving_percentiles 聚合必须嵌入到 histogramdate_histogram 聚合中。它们可以像任何其他指标聚合一样嵌入

response = client.search(
  body: {
    size: 0,
    aggregations: {
      my_date_histo: {
        date_histogram: {
          field: 'date',
          calendar_interval: '1M'
        },
        aggregations: {
          the_percentile: {
            percentiles: {
              field: 'price',
              percents: [
                1,
                99
              ]
            }
          },
          the_movperc: {
            moving_percentiles: {
              buckets_path: 'the_percentile',
              window: 10
            }
          }
        }
      }
    }
  }
)
puts response
POST /_search
{
  "size": 0,
  "aggs": {
    "my_date_histo": {                          
        "date_histogram": {
        "field": "date",
        "calendar_interval": "1M"
      },
      "aggs": {
        "the_percentile": {                     
            "percentiles": {
            "field": "price",
            "percents": [ 1.0, 99.0 ]
          }
        },
        "the_movperc": {
          "moving_percentiles": {
            "buckets_path": "the_percentile",   
            "window": 10
          }
        }
      }
    }
  }
}

一个名为“my_date_histo”的 date_histogram 是在“timestamp”字段上构建的,间隔为一天

一个 percentile 指标用于计算字段的百分位数。

最后,我们指定一个 moving_percentiles 聚合,它使用“the_percentile”草图作为其输入。

移动百分位的构建方法是:首先指定一个字段上的 histogramdate_histogram。然后在该直方图中添加一个百分位指标。最后,将 moving_percentiles 嵌入到直方图中。buckets_path 参数随后用于“指向”直方图内的百分位聚合(有关 buckets_path 语法的描述,请参阅 buckets_path 语法)。

以下可能是响应

{
   "took": 11,
   "timed_out": false,
   "_shards": ...,
   "hits": ...,
   "aggregations": {
      "my_date_histo": {
         "buckets": [
             {
                 "key_as_string": "2015/01/01 00:00:00",
                 "key": 1420070400000,
                 "doc_count": 3,
                 "the_percentile": {
                     "values": {
                       "1.0": 151.0,
                       "99.0": 200.0
                     }
                 }
             },
             {
                 "key_as_string": "2015/02/01 00:00:00",
                 "key": 1422748800000,
                 "doc_count": 2,
                 "the_percentile": {
                     "values": {
                       "1.0": 10.4,
                       "99.0": 49.6
                     }
                 },
                 "the_movperc": {
                   "values": {
                     "1.0": 151.0,
                     "99.0": 200.0
                   }
                 }
             },
             {
                 "key_as_string": "2015/03/01 00:00:00",
                 "key": 1425168000000,
                 "doc_count": 2,
                 "the_percentile": {
                    "values": {
                      "1.0": 175.25,
                      "99.0": 199.75
                    }
                 },
                 "the_movperc": {
                    "values": {
                      "1.0": 11.6,
                      "99.0": 200.0
                    }
                 }
             }
         ]
      }
   }
}

moving_percentiles 聚合的输出格式继承自引用的 percentiles 聚合的格式。

移动百分位管道聚合始终使用 skip 间隙策略运行。

shift 参数编辑

默认情况下(使用 shift = 0),提供用于计算的窗口是最后 n 个值(不包括当前桶)。将 shift 增加 1 会将起始窗口位置向右移动 1

  • 要将当前桶包含到窗口中,请使用 shift = 1
  • 对于居中对齐(当前桶前后 n / 2 个值),请使用 shift = window / 2
  • 对于右对齐(当前桶后 n 个值),请使用 shift = window

如果任一窗口边缘移动到数据序列边界之外,则窗口将缩小以仅包含可用值。