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

百分比排名聚合

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

注意:有关百分比排名聚合的近似值和内存使用的建议,请参阅百分比是(通常)近似值和压缩值。

百分位等级表示低于某一数值的观测值的百分比。例如,如果一个值大于或等于观察值的95%,则称其处于第95百分位等级。

假设您的数据由网站加载时间组成。您可能有一个服务协议,95%的页面加载完全在500ms内,99%的页面加载完全在600ms内。

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

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "field" : "load_time", <1>
                "values" : [500, 600]
            }
        }
    }
}
  1. 字段load_time 必须是数字字段

 响应:

{
    ...

   "aggregations": {
      "load_time_ranks": {
         "values" : {
            "500.0": 55.00000000000001,
            "600.0": 64.0
         }
      }
   }
}

根据这些信息,您可以确定您达到了99%的加载时间目标,但没有完全达到95%的加载时间目标。

Keyed  Response

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

GET latency/_search
{
    "size": 0,
    "aggs": {
        "load_time_ranks": {
            "percentile_ranks": {
                "field": "load_time",
                "values": [500, 600],
                "keyed": false
            }
        }
    }
}

响应:

{
    ...

    "aggregations": {
        "load_time_ranks": {
            "values": [
                {
                    "key": 500.0,
                    "value": 55.00000000000001
                },
                {
                    "key": 600.0,
                    "value": 64.0
                }
            ]
        }
    }
}

脚本

百分位排名指标支持脚本编写。例如,如果加载时间以毫秒为单位,但我们希望以秒为单位指定值,则可以使用脚本动态转换这些值:

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "values" : [500, 600],
                "script" : {
                    "lang": "painless",
                    "source": "doc['load_time'].value / params.timeUnit", <1>
                    "params" : {
                        "timeUnit" : 1000   <2>
                    }
                }
            }
        }
    }
}

 

  1. 字段参数替换为脚本参数,脚本参数使用脚本生成计算百分位数排名的值。

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

 

通过painless脚本语言和无脚本参数将script参数翻译为一个inline脚本。要使用文件脚本,使用以下语法:

 

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "values" : [500, 600],
                "script" : {
                    "id": "my_script",
                    "params": {
                        "field": "load_time"
                    }
                }
            }
        }
    }
}

HRD柱状图

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

HDR Histogram(高动态范围柱状图)是一种替代实现,在计算延迟测量的百分比数量级时可能很有用,因为它比t-digest实现更快,同时占用更大的内存空间。该实现维持固定的较差的百分比错误(指定为有效数字的数量)。这意味着如果在柱状图中设置3位有效数字的数据被记录在1微妙至1小时(3600,000,000微妙)之间,它将保持从1微妙值增加到为最大跟踪值(1小时)保留1毫秒和3.6分钟(或更好)分辨率。

HDR Histogram可以通过在request中指定method参数来使用:

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "field" : "load_time",
                "values" : [500, 600],
                "hdr": { <1>
                  "number_of_significant_value_digits" : 3 <2>
                }
            }
        }
    }
}
  1. hdr对象表示应该使用HRD Histogram来计算百分位数,并且可以在对象内部指定该算法的具体设置。
  2. number_of_significant_value_digits表示以有效数字值表示柱状图的分辨率。

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

缺省值

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

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_ranks" : {
            "percentile_ranks" : {
                "field" : "load_time",
                "values" : [500, 600],
                "missing": 10 <1>
            }
        }
    }
}
  1. 在“load_time ”字段中没有值的文档将与值为10的文档属于同一个存储桶。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值