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)的用法一样

猜你喜欢

转载自blog.csdn.net/bohu83/article/details/106982151
46