1.定义与用途
`derivative`聚合是一种管道聚合(pipeline aggregation),用于计算指定度量(metric)的变化率。它通过计算当前值与前一个值之间的差异来实现这一点。这种聚合特别适用于分析时间序列数据,例如监控系统中的指标变化、销售数据的趋势分析等。
2.工作原理
`derivative`聚合的核心是计算相邻数据点之间的差异。具体来说,它会根据指定的`buckets_path`获取数据点,并计算每个数据点与前一个数据点之间的差值。第一个数据点没有前一个值,因此不会生成导数值。
3.参数
• `buckets_path`:必需参数,指定要计算导数的聚合路径。例如,如果要计算某个`sum`聚合的导数,`buckets_path`应指向该聚合的名称。
• `gap_policy`:可选参数,定义如何处理数据中的间隙。默认值为`skip`,表示跳过缺失的数据点。
• `format`:可选参数,定义输出值的格式。如果指定,格式化的值将返回在聚合的`value_as_string`属性中。
4.应用场景
`derivative`聚合广泛应用于以下场景:
• 趋势分析:通过计算销售额、流量等指标的变化率,可以快速识别增长或下降趋势。
• 异常检测:通过分析导数值的异常波动,可以及时发现数据中的异常情况。
5.示例
以下是一个具体的例子,展示如何使用`derivative`聚合来计算每月销售额的变化率。
假设我们有一个索引`sales`,其中记录了每次销售的日期(`date`字段)和销售金额(`price`字段)。我们希望计算每月销售额的变化率。
查询示例:
```json
POST /sales/_search
{
"size": 0,
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"sales": {
"sum": {
"field": "price"
}
},
"sales_deriv": {
"derivative": {
"buckets_path": "sales"
}
}
}
}
}
}
```
响应结果:
```json
{
"took": 11,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"sales_per_month": {
"buckets": [
{
"key_as_string": "2015-01-01T00:00:00.000Z",
"key": 1420070400000,
"doc_count": 2,
"sales": {
"value": 1050.0
}
},
{
"key_as_string": "2015-02-01T00:00:00.000Z",
"key": 1422748800000,
"doc_count": 2,
"sales": {
"value": 60.0
},
"sales_deriv": {
"value": -990.0
}
},
{
"key_as_string": "2015-03-01T00:00:00.000Z",
"key": 1425168000000,
"doc_count": 2,
"sales": {
"value": 375.0
},
"sales_deriv": {
"value": 315.0
}
}
]
}
}
}
```
结果解释:
• 2015-01:总销售额为 1050,没有导数值(因为这是第一个数据点)。
• 2015-02:总销售额为 60,导数值为-990(表示销售额从 1050 下降到 60,变化率为-990)。
• 2015-03:总销售额为 375,导数值为 315(表示销售额从 60 增加到 375,变化率为 315)。
6.注意事项
• 数据完整性:确保数据中没有缺失值,否则可能需要设置合适的`gap_policy`。
• 单位转换:可以通过`unit`参数将导数的单位从默认的时间单位(如每月)转换为其他单位(如每天),方便更直观地分析数据。
通过`derivative`聚合,您可以轻松地分析数据的变化趋势,从而更好地理解数据的动态变化。希望这些内容对您有所帮助!