移动百分位数聚合

编辑

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

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

语法

编辑

单独的moving_percentiles聚合看起来像这样:

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

表 77. moving_percentiles 参数

参数名称 描述 是否必需 默认值

buckets_path

目标百分位数的路径(更多详情请参见buckets_path语法

是否必需

window

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

是否必需

shift

窗口位置偏移

可选

0

moving_percentiles聚合必须嵌套在histogramdate_histogram聚合内。它们可以像任何其他度量聚合一样嵌套。

resp = client.search(
    size=0,
    aggs={
        "my_date_histo": {
            "date_histogram": {
                "field": "date",
                "calendar_interval": "1M"
            },
            "aggs": {
                "the_percentile": {
                    "percentiles": {
                        "field": "price",
                        "percents": [
                            1,
                            99
                        ]
                    }
                },
                "the_movperc": {
                    "moving_percentiles": {
                        "buckets_path": "the_percentile",
                        "window": 10
                    }
                }
            }
        }
    },
)
print(resp)
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
const response = await client.search({
  size: 0,
  aggs: {
    my_date_histo: {
      date_histogram: {
        field: "date",
        calendar_interval: "1M",
      },
      aggs: {
        the_percentile: {
          percentiles: {
            field: "price",
            percents: [1, 99],
          },
        },
        the_movperc: {
          moving_percentiles: {
            buckets_path: "the_percentile",
            window: 10,
          },
        },
      },
    },
  },
});
console.log(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
          }
        }
      }
    }
  }
}

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

使用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

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