导数聚合
derivative
聚合是一种父聚合,用于计算聚合的每个桶的一阶和二阶导数。“一阶导数”和“二阶导数”通常分别缩写为“一阶导数”和“二阶导数”。本页面使用缩写形式。
对于有序的桶序列,derivative
通过计算当前桶和前一个桶中指标值之差来近似一阶导数。
参数
derivative
聚合接受以下参数。
参数 | 必需/可选 | 数据类型 | 描述 |
---|---|---|---|
buckets_path | 必需 | 字符串 | 要聚合的聚合桶的路径。参见桶路径。 |
gap_policy | 可选 | 字符串 | 应用于缺失数据的策略。有效值为 skip 和 insert_zeros 。默认值为 skip 。请参阅数据间隙。 |
format | 可选 | 字符串 | 一个 DecimalFormat 格式化字符串。将格式化后的输出返回到聚合的 value_as_string 属性中。 |
示例:一阶导数
以下示例使用 OpenSearch Dashboards 电子商务样本数据创建一个以一个月为间隔的日期直方图。sum
子聚合计算每个月的总字节数。最后,derivative
聚合计算 sum
子聚合的一阶导数。一阶导数估计为当前月份与上一个月份的字节数之差。
GET opensearch_dashboards_sample_data_logs/_search
{
"size": 0,
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "@timestamp",
"calendar_interval": "month"
},
"aggs": {
"number_of_bytes": {
"sum": {
"field": "bytes"
}
},
"bytes_deriv": {
"derivative": {
"buckets_path": "number_of_bytes"
}
}
}
}
}
}
示例响应:一阶导数
响应显示了为第二个和第三个桶计算的导数。
{
"took": 6,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 10000,
"relation": "gte"
},
"max_score": null,
"hits": []
},
"aggregations": {
"sales_per_month": {
"buckets": [
{
"key_as_string": "2025-03-01T00:00:00.000Z",
"key": 1740787200000,
"doc_count": 480,
"number_of_bytes": {
"value": 2804103
}
},
{
"key_as_string": "2025-04-01T00:00:00.000Z",
"key": 1743465600000,
"doc_count": 6849,
"number_of_bytes": {
"value": 39103067
},
"bytes_deriv": {
"value": 36298964
}
},
{
"key_as_string": "2025-05-01T00:00:00.000Z",
"key": 1746057600000,
"doc_count": 6745,
"number_of_bytes": {
"value": 37818519
},
"bytes_deriv": {
"value": -1284548
}
}
]
}
}
}
第一个桶没有计算导数,因为该桶没有可用的前一个桶。
示例:二阶导数
要计算二阶导数,请将一个导数聚合链接到另一个导数聚合。
GET opensearch_dashboards_sample_data_logs/_search
{
"size": 0,
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "@timestamp",
"calendar_interval": "month"
},
"aggs": {
"number_of_bytes": {
"sum": {
"field": "bytes"
}
},
"bytes_1st_deriv": {
"derivative": {
"buckets_path": "number_of_bytes"
}
},
"bytes_2nd_deriv": {
"derivative": {
"buckets_path": "bytes_1st_deriv"
}
}
}
}
}
}
示例响应:二阶导数
{
"took": 6,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 10000,
"relation": "gte"
},
"max_score": null,
"hits": []
},
"aggregations": {
"sales_per_month": {
"buckets": [
{
"key_as_string": "2025-03-01T00:00:00.000Z",
"key": 1740787200000,
"doc_count": 480,
"number_of_bytes": {
"value": 2804103
}
},
{
"key_as_string": "2025-04-01T00:00:00.000Z",
"key": 1743465600000,
"doc_count": 6849,
"number_of_bytes": {
"value": 39103067
},
"bytes_1st_deriv": {
"value": 36298964
}
},
{
"key_as_string": "2025-05-01T00:00:00.000Z",
"key": 1746057600000,
"doc_count": 6745,
"number_of_bytes": {
"value": 37818519
},
"bytes_1st_deriv": {
"value": -1284548
},
"bytes_2nd_deriv": {
"value": -37583512
}
}
]
}
}
}
第一个桶没有计算一阶导数,因为该桶没有可用的前一个桶。同样,第一个或第二个桶也没有计算二阶导数。