移动百分位数聚合

编辑

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

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

语法

编辑

一个 moving_percentiles 聚合在单独使用时如下所示

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

表 76. 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
          }
        }
      }
    }
  }
}

一个名为 “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

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