我有一个查询日期直方图agg,其中包含间隔(例如1个月)的延迟值的95%aggs。
通过查询,我可以获得百分位的星期值。我想在存储桶中平均获取所有百分比。
查询:
th
我得到的当前答复:
{
"size": 0,
"query": {
"bool": {
"filter": {
"range": {
"timestamp": {
"gte": "2019-04-03 10:35:04 UTC",
"lte": "2019-05-01 10:35:04 UTC"
}
}
}
}
},
"aggs": {
"weeks_avg": {
"date_histogram": {
"field": "timestamp",
"interval": "7d",
"min_doc_count": 1
},
"aggs": {
"week": {
"percentiles": {
"field": "value",
"percents": [
95
],
"hdr": {
"number_of_significant_value_digits": 3
}
}
}
}
}
}
}
我是否需要创建另一个Agg来计算这5个存储桶的AVG值?换句话说,执行以下操作:
totalPercentileAvg =(week1.percentileValue + week2.percentileValue + week3.percentileValue + week4.percentileValue)/ 4;
我有点困惑,因为已经尝试了许多语法错误。
谢谢。
答案 0 :(得分:1)
如果要同时使用95和avg,则可以分别指定它们:
...
"aggs": {
"weeks_avg": {
"date_histogram": {
"field": "timestamp",
"interval": "7d",
"min_doc_count": 1
},
"aggs": {
"week": {
"percentiles": {
"field": "value",
"percents": [
95
],
"hdr": {
"number_of_significant_value_digits": 3
}
}
},
"week_avg" : {
"avg": {
"field": "value"
}
}
}
}
}
编辑: 要获得95%的平均值:
...
"aggs": {
"weeks_avg": {
"date_histogram": {
"field": "timestamp",
"interval": "7d",
"min_doc_count": 1
},
"aggs": {
"week": {
"percentiles": {
"field": "value",
"percents": [
95
],
"hdr": {
"number_of_significant_value_digits": 3
}
}
}
}
},
"avg_weekly_value": {
"avg_bucket": {
"buckets_path": "weeks_avg>week.95"
}
}
答案 1 :(得分:0)
在这里要小心-确保您了解要获取的统计信息。躲起来假设您正在以某种方式查看性能,例如数据库响应时间(以毫秒为单位)。越低越好。
您将这个问题描述为
totalPercentileAvg =(week1.percentileValue + week2.percentileValue + week3.percentileValue + week4.percentileValue)/ 4;
首先,如果您想将整个4个期间汇总为一个数字,为什么只取整个4周内计算出的percentileValue,这有什么问题呢?
我不敢将这个数字任意分成4个,然后取这4个的平均值作为值?想象一下,您有3个好礼拜,而交易量少,而一个坏礼拜却有,交易量大。在好的星期,您的percentileValue是400。在糟糕的星期,它是800。这里的平均值是500ms,这似乎还可以。但是,也许在糟糕的一周里的交易量是在三个好的星期里的10倍,并且您的客户体验缓慢,但是您的统计数据几乎完全忽略了这一点。
(您引用的数据在一周和另一周之间的命中率几乎完全是10:1)