Elasticsearch核心技術與實戰學習筆記 46 | Pipeline聚合分析

一 序

  本文屬於極客時間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).

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-derivative-aggregation.html

Moving Average移動平均(moving_avg)、Cumulative Sum累計求和(cumulative_sum)的用法一樣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章