百分位数聚合

多值度量聚合,计算从聚合文档中提取的数值的一个或多个百分位数。这些值可以从文档中的特定数字字段中提取,也可以由提供的脚本生成。

百分位数表示观察值的某个百分比出现的点。例如,95%是大于观察值95%的值。

百分位数通常用于查找异常值。在正态分布中,0.13%和99.87%表示与平均值的三个标准差。任何超出三个标准差的数据通常被视为异常。

当检索到一个百分位数范围时,它们可以用来估计数据分布,并确定数据是否是歪斜的、双峰的等。

假设您的数据由网站加载时间组成。对于管理员来说,平均和中间加载时间并不太有用。最大值可能很有趣,但很容易被一个缓慢的响应所扭曲。

让我们看看代表加载时间的百分位数范围:

GET latency/_search
{"size": 0,"aggs" : {"load_time_outlier" : {"percentiles" : {"field" : "load_time" <1>}}}
}
  1. 字段加载时间必须是数字字段

默认情况下,百分位数度量将生成百分位数范围:[1、5、25、50、75、95、99]。回答如下:

{..."aggregations": {"load_time_outlier": {"values" : {"1.0": 5.0,"5.0": 25.0,"25.0": 165.0,"50.0": 445.0,"75.0": 725.0,"95.0": 945.0,"99.0": 985.0}}}
}

如您所见,聚合将返回默认范围内每个百分位数的计算值。如果我们假设响应时间以毫秒为单位,那么很明显网页通常在10-725毫秒内加载,但偶尔会达到945-985毫秒。

通常,管理员只对异常值-极端百分位数感兴趣。我们可以只指定我们感兴趣的百分比(请求的百分比必须是0-100之间的值,包括0-100):

GET latency/_search
{"size": 0,"aggs" : {"load_time_outlier" : {"percentiles" : {"field" : "load_time","percents" : [95, 99, 99.9]  <1>}}}
}
  1. 使用percents参数指定要计算的特定百分比

键控响应

默认情况下,keyed标志设置为true,它将唯一的字符串键与每个bucket相关联,并将范围作为哈希而不是数组返回。将keyed标志设置为false将禁用此行为:

GET latency/_search
{"size": 0,"aggs": {"load_time_outlier": {"percentiles": {"field": "load_time","keyed": false}}}
}

响应:

{..."aggregations": {"load_time_outlier": {"values": [{"key": 1.0,"value": 5.0},{"key": 5.0,"value": 25.0},{"key": 25.0,"value": 165.0},{"key": 50.0,"value": 445.0},{"key": 75.0,"value": 725.0},{"key": 95.0,"value": 945.0},{"key": 99.0,"value": 985.0}]}}
}

脚本

百分位数指标支持脚本编写。例如,如果加载时间以毫秒为单位,但我们希望以秒为单位计算百分位数,则可以使用脚本动态转换它们:

GET latency/_search
{"size": 0,"aggs" : {"load_time_outlier" : {"percentiles" : {"script" : {"lang": "painless","source": "doc['load_time'].value / params.timeUnit", <1>"params" : {"timeUnit" : 1000   <2>}}}}}
}
  1. field 参数替换为script 参数,脚本参数使用脚本生成计算百分位数的值。

  2. 脚本支持参数化输入,就像其他脚本一样

这将把脚本参数解释为具有painless 脚本语言且没有脚本参数的内联脚本。要使用存储的脚本,请使用以下语法:

GET latency/_search
{"size": 0,"aggs" : {"load_time_outlier" : {"percentiles" : {"script" : {"id": "my_script","params": {"field": "load_time"}}}}}
}

百分位数(通常)近似

计算百分位数有许多不同的算法。简单的实现只是将所有值存储在一个排序数组中。要找到第50个百分点值,只需找到 my_array[count(my_array) * 0.5]中的值。

显然,简单的实现不会缩放-排序后的数组会随着数据集中的值的数量线性增长。为了计算弹性搜索集群中潜在数十亿值的百分位数,需要计算近似百分位数。

百分位数度量使用的算法称为tdigest(由Ted Dunning在使用t-digests计算精确分位数时引入)。

使用此度量标准时,需要记住以下几条准则:

  1. 精度与q(1-q)成正比。这意味着极端百分位数(如99%)比不太极端百分位数(如中位数)更准确。

  2. 对于较小的值集,百分位数是高度准确的(如果数据足够小,则可能100%准确)。

  3. 当一个桶中的值的数量增加时,算法开始逼近百分位数。它有效地利用准确性来节省内存。准确的不准确程度很难概括,因为它取决于您的数据分布和被聚合的数据量。

下表显示了均匀分布上的相对误差,具体取决于收集值的数量和请求的百分比:

它显示了极端百分位数的精度如何更好。大值误差减小的原因是大数定律使值的分布越来越均匀,T-摘要树可以更好地对其进行汇总。在更偏斜的分布上不会如此。

压缩

近似算法必须平衡内存利用率和估计精度。可以使用压缩参数控制此平衡:

GET latency/_search
{"size": 0,"aggs" : {"load_time_outlier" : {"percentiles" : {"field" : "load_time","tdigest": {"compression" : 200 <1>}}}}
}
  1. 压缩控制内存使用和近似错误

tdigest算法使用许多“节点”来近似百分位数-可用的节点越多,与数据量成比例的精度(和较大的内存占用)就越高。压缩参数将最大节点数限制为20*压缩。

因此,通过增加压缩值,您可以增加百分位数的准确性,但需要消耗更多的内存。压缩值越大,算法速度越慢,因为底层树数据结构的大小越大,操作成本越高。默认压缩值为100。

“节点”使用大约32字节的内存,因此在最坏的情况下(大量数据按顺序排序到达),默认设置将产生大约64kb的数据。在实践中,数据往往更随机,数据格式将使用更少的内存。

HRD柱状图

提示:此设置公开HDR柱状图的内部实现,以后可能会更改语法。

hdr柱状图(高动态范围柱状图)是一种可选的实现,在计算延迟测量的百分位数时非常有用,因为它比T-Digest实现更快,并且需要权衡更大的内存占用。此实现维护一个固定的更糟的事例百分比错误(指定为有效位数)。这意味着,如果数据以1微秒到1小时(3600000000微秒)的值记录在一个设置为3个有效数字的柱状图中,它将保持1微秒的值分辨率(对于1毫秒的值)和3.6秒(或更好)的最大跟踪值(1小时)。我们的)

hdr柱状图可以通过在请求中指定方法参数来使用:

GET latency/_search
{"size": 0,"aggs" : {"load_time_outlier" : {"percentiles" : {"field" : "load_time","percents" : [95, 99, 99.9],"hdr": {  <1>"number_of_significant_value_digits" : 3 <2>}}}}
}
  1. hdr对象表示应该使用hdr柱状图来计算百分位数,并且可以在对象内部指定此算法的特定设置。

  2. number_of_significant_value_digits 指定柱状图值的分辨率(有效位数)

hdr柱状图只支持正值,如果传递负值,则会出错。如果值的范围未知,那么使用hdr柱状图也不是一个好主意,因为这可能导致高内存使用率。

缺省值

缺少参数定义如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。

GET latency/_search
{"size": 0,"aggs" : {"grade_percentiles" : {"percentiles" : {"field" : "grade","missing": 10 <1>}}}
}
  1. “等级”字段中没有值的文档与值为10的文档属于同一个存储桶。

Elasticsearch 7.3.0 翻译 - 《Aggregations》 度量聚合 百分位数聚合相关推荐

  1. Elasticsearch 5.x Java api Aggregations(聚合)

    Ealsticsearch 5.x Java API聚合string类型的时候,会报错(json的错),则需要在聚合的string类型字段的后面添加.keyword , 虽然使用watch查看聚合的e ...

  2. Elasticsearch 7.X-8.0 AggregationBuliders 相关聚合函数(一)计数指标-百分位数

    percentiles 百分位聚合 ‎百分位数显示出现一定百分比的观测值的点. 默认统计的百分位数为:[ 1, 5, 25, 50, 75, 95, 99 ] 请求示例: GET latency/_s ...

  3. Elasticsearch Java API 的使用(13)—分组聚合之一

    分组聚和不像度量聚合那样通过字段进行计算,而是根据文档创建分组.每个聚合都关联一个标准(取决于聚合的类型),决定了一个文档在当前的条件下是否会"划入"分组中. 换句话说,分组实际上 ...

  4. Elasticsearch 7.4.0官方文档操作

    官方文档地址 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 1.0.0 设置Elasticsea ...

  5. ElasticSearch java API - 聚合查询-聚合多字段聚合demo

    以球员信息为例,player索引的player type包含5个字段,姓名,年龄,薪水,球队,场上位置. index的mapping为: "mappings": {"pl ...

  6. Elasticsearch教程(4) High Level REST Client API 查询 聚合 分组

    ES High Level REST Client API 查询 聚合 1 准备数据 1.1 插入测试数据 2 Maven引入ES 3 创建Client 4 查询API 4.1 根据id查询单条数据 ...

  7. ElasticSearch 7.7.0 安装部署

    前言 本篇主要聊聊ES生产环境的一些规划,以及ES的集群搭建. 一 环境规划 1.1 磁盘的选型 固态硬盘(SSD) 提供最佳"热"工作负载的性能. 普通磁盘(HDD) 成本低,用 ...

  8. Elasticsearch 7.9.0 发布

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://www.oschina.net ...

  9. elasticsearch 7.8.0 kibana 7.8.0安装部署

    下载es.kibana 在这里 下载elasticsearch 7.8.0 版本 在这里 下载kibana7.8.0版本 下载后的文件:elasticsearch-7.8.0-linux-x86_64 ...

最新文章

  1. 通过OKR 进行项目过程管理
  2. ph值图片_螃蟹养殖大数据——高温季节的pH值过高,不适宜养殖螃蟹?未必
  3. python3 爬虫4--解析链接
  4. 如何科学高效的学习Web前端开发?
  5. 案例解读:Oracle目录由于TFA触发bug导致jdb文件未自动清理引起空间不足
  6. C语言实现常用排序算法——基数排序
  7. 可视化Web报表设计器-FastReport Online Designer简介
  8. HSV颜色识别demo
  9. AI人才供不应求:应届生年薪可达50万 没出校门已被抢光
  10. Aqua Data Studio 18.5.0导出insert语句
  11. FPGA SPI协议
  12. 降雨量等值线图(一)——底图整饬
  13. 计世资讯:用户对大数据安全分析需求逐渐迫切
  14. word size计算机,计算机基础结构 - 扣丁书屋 - https://www.codingsky.com
  15. 氧含量测量方法:燃料电池法
  16. ajax判断成功状态码,Ajax返回状态码200,成功函数不触发(Ajax returns status code 200, success function not triggering)...
  17. 【Unity人物动画】SALSA With RandomEyes (语音生成嘴型/人物说话) 使用
  18. Xshell安装与使用
  19. js常见面试题(二)
  20. ②(常识篇)、《史上最全iOS八股文面试题》2022年,金三银四我为你准备了,iOS《1000条》笔试题以及面试题(包含答案)。带面试你过关斩将,(赶紧过来背iOS八股文)

热门文章

  1. 如何检测ip和端口是否连通
  2. Self-attention GAN
  3. 腾讯、阿里校招面试真题-常见经典题
  4. 如何在Genymotion虚拟设备上安装Google框架(Play,Accounts等)? [重复]
  5. Buct oj 1016
  6. 师兄写的一个JAVA播放器的源代码(转)
  7. Logstash:Logstash translate 过滤器简介
  8. 难以置信!网易首席架构师竟用了500页笔记,把网络协议给趣谈了
  9. 小学一年级上学期必背古诗文2021-2022学年
  10. 野火指南者移植hal+rtthread+lvgl