一 序
本文屬於極客時間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
)的用法一樣