一 序
本文属于极客时间Elasticsearch核心技术与实战学习笔记系列。
可以结合上一节课来理解,使用了做统计分析的
聚合分析:英文为Aggregation,是es除搜索功能外提供的针对es数据做统计分析的功能。
功能丰富:提供Bucket、Metric、Pipeline等多种分析方式,可以满足大部分的分析需求
实时性高:所有的计算结果都是即时返回的,而hadoop等大数据系统一般都是T+1级别的
例如聚合分析可以回答如下问题:
请告诉我最近1周每天的订单成交量有多少?
请告诉我最近1个月每天的平均订单金额是多少?
请告诉我最近半年卖的最火的前5个商品有哪些?
聚合分析分类:
Bucket
:分桶类型,类似SQL中的GROUP BY语法Metric
:指标分析类型,如计算最大值、最小值、平均值等等Pipeline
:管道分析类型,基于上一级的聚合分析结果进行在分析Matrix
:矩阵分析类型
Historgram:
直方图,以固定间隔的策略来分割数据
百分位数:如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数。
上节课学习过bucket、metric了,本节课主要学习pipeline
二 Pipeline
Pipeline简单来说就是对聚合分析再做一次聚合分析。下面看个例子来理解下:
2.1 例子min_bucket
在员工数最多的工种里,找出平均工资最低的工种
job.keyword做分桶,通过avg_salary子聚合来求桶中的平均工资,然后就可以使用pipeline的min_salary_by_job,她和jobs平级,里面定义了min_bucket ,它的bucket_path指定的作用:jobs>avg_salary ,需要对avg_salary再进行一次min_bucket计算。
2.2 Pipeline
管道的概念:支持对聚合分析的结果,再次进行聚合分析
Pipeline 的分析结果会输出到原结果汇总,根据位置的不同,分为两类
Sibling - 结果和现有分析结果同级
- Max,min,Avg&Sum Bucket
- Stats , Extened Status Bucket
- Percentiles Bucket
Parent - 结果内嵌到现有的聚合分析结果之中
- Derivative(求导)
- Cumultive Sum(累计求和)
- Moving Function(滑动窗口)
2.3 Sibling Pipeline例子
测试数据还是上一节课的employees
# 平均工资最低的工作类型
POST employees/_search
{
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 10
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
}
}
},
"min_salary_by_job":{
"min_bucket": {
"buckets_path": "jobs>avg_salary"
}
}
}
}
# 平均工资的平均工资
平均工资的统计分析
平均工资的百分位数
2.4 Parent Pipeline : Derivative
-parent 结果内嵌到现有的聚合分析结果中
- derivative 求导 计算父级histgram(date_histgram)中指定指标的导数
- cumulati average 累计总和 计算父histgram(date_histgram)中指定指标的累计总和。
- moving average 移动平均值 聚合将动态移动数据窗口,生成该窗口数据的平均值。
针对age做的histogram直方图分桶。下面的子聚合avg_salary又对salary做平均.
最后做了derivative_avg_salary的聚合,对它的类型是求导,注意它的位置是在大的聚合内部,与avg_salary是同级的,所以可以buckets_path直接指定avg_salary。
derivative_avg_salary:求导我不太理解,看了官网也不理解,求大神解释下
Derivative Aggregation
A parent pipeline aggregation which calculates the derivative of a specified metric in a parent histogram (or date_histogram) aggregation. The specified metric must be numeric and the enclosing histogram must have min_doc_count
set to 0
(default for histogram
aggregations).
Moving Average移动平均(moving_avg
)、Cumulative Sum累计求和(cumulative_sum
)的用法一样