aggregation 详解4(pipeline aggregations)

概述

管道聚合处理的对象是其它聚合的输出(桶或者桶的某些权值),而不是直接针对文档。

管道聚合的作用是为输出增加一些有用信息。

管道聚合大致分为两类:

parent

  • 此类聚合的"输入"是其【父聚合】的输出,并对其进行进一步处理。一般不生成新的桶,而是对父聚合桶信息的增强。

sibling

  • 此类聚合的输入是其【兄弟聚合】的输出。并能在同级上计算新的聚合。

管道聚合通过 buckets_path 参数指定他们要进行聚合计算的权值对象,buckets_path 参数有其自己的使用语法。

管道聚合不能包含子聚合,但是某些类型的管道聚合可以链式使用(比如计算导数的导数)。

bucket_path语法

1. 聚合分隔符 ==> ">",指定父子聚合关系,如:"my_bucket>my_stats.avg"

2. 权值分隔符 ==> ".",指定聚合的特定权值

3. 聚合名称 ==> <name of the aggregation> ,直接指定聚合的名称

4. 权值 ==> <name of the metric> ,直接指定权值

5. 完整路径 ==> agg_name[> agg_name]*[. metrics] ,综合利用上面的方式指定完整路径

6. 特殊值 ==> "_count",输入的文档个数

特殊情况

1. 要进行 pipeline aggregation 聚合的对象名称或权值名称包含小数点

  • "buckets_path": "my_percentile[99.9]"

2. 处理对象中包含空桶(无文档的桶分)

  • 参数 gap_policy,可选值有 skip、insert_zeros

Avg Bucket Aggregation(sibliing)

桶均值聚合——基于兄弟聚合的某个权值,求所有桶的权值均值。

用于计算的兄弟聚合必须是多桶聚合。

用于计算的权值必须是数值类型。

配置参数

  • buckets_path:用于计算均值的权值路径
  • gap_policy:空桶处理策略(skip/insert_zeros)
  • format:该聚合的输出格式定义
{
    "aggs" : {
        "sales_per_month" : {
            "date_histogram" : {
                "field" : "date",
                "interval" : "month"
            },
            "aggs": {
                "sales": {
                    "sum": {
                        "field": "price"
                    }
                }
            }
        },
        "avg_monthly_sales": {
            "avg_bucket": {             //对所有月份的销售总 sales 求平均值
                "buckets_path": "sales_per_month>sales"
            }
        }
    }
}

Derivative Aggregation(parent)

求导聚合——基于父聚合(只能是histogram或date_histogram类型)的某个权值,对权值求导。

用于求导的权值必须是数值类型。

封闭直方图(histogram)聚合的 min_doc_count 必须是 0。

配置参数

  • buckets_path:用于计算均值的权值路径
  • gap_policy:空桶处理策略(skip/insert_zeros)
  • format:该聚合的输出格式定义
{
    "aggs" : {
        "sales_per_month" : {
            "date_histogram" : {
                "field" : "date",
                "interval" : "month"
            },
            "aggs": {
                "sales": {
                    "sum": {
                        "field": "price"
                    }
                },
                "sales_deriv": {       //对每个月销售总和 sales 求导
                    "derivative": {
                        "buckets_path": "sales"  //同级,直接用 metric 值
                    }
                }
            }
        }
    }
}

    Max Bucket Aggregation(sibling)

    桶最大值聚合——基于兄弟聚合的某个权值,输出权值最大的那一个桶。

    用于计算的权值必须是数值类型。

    用于计算的兄弟聚合必须是多桶聚合类型。

    配置参数

    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    • format:该聚合的输出格式定义

    Min Bucket Aggregation(sibling)

    桶最小值聚合——基于兄弟聚合的某个权值,输出权值最小的一个桶。

    用于计算的权值必须是数值类型。

    用于计算的兄弟聚合必须是多桶聚合类型。

    配置参数

    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    • format:该聚合的输出格式定义

    Sum Buchet Aggregation(sibling)

    桶求和聚合——基于兄弟聚合的权值,对所有桶的权值求和。

    用于计算的权值必须是数值类型。

    用于计算的兄弟聚合必须是多桶聚合类型。

    配置参数

    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    • format:该聚合的输出格式定义
    {
        "aggs" : {
            "sales_per_month" : {
                "date_histogram" : {
                    "field" : "date",
                    "interval" : "month"
                },
                "aggs": {
                    "sales": {
                        "sum": {
                            "field": "price"
                        }
                    }
                }
            },
            "max_monthly_sales": {        //输出兄弟聚合 sales_per_month 的每月销售总和 sales 的最大一个桶
                "max_bucket": {
                    "buckets_path": "sales_per_month>sales"
                }
            },
            "min_monthly_sales": {         //输出兄弟聚合 sales_per_month 的每月销售总和 sales 的最小一个桶
                "min_bucket": {
                    "buckets_path": "sales_per_month>sales"
                }
            },
            "sum_monthly_sales": {         //输出兄弟聚合 sales_per_month 的每月销售总和 sales 的最小一个桶
                "sum_bucket": {
                    "buckets_path": "sales_per_month>sales"
                }
            }
        }
    }

    Stats Bucket Aggregation(sibling)

    桶统计信息聚合——基于兄弟聚合的某个权值,对【桶的信息】进行一些统计学运算(总计多少个桶、所有桶中该权值的最大值、最小等)。

    用于计算的权值必须是数值类型。

    用于计算的兄弟聚合必须是多桶聚合类型。

    配置参数

    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    • format:该聚合的输出格式定义
    {
        "aggs" : {
            "sales_per_month" : {
                "date_histogram" : {
                    "field" : "date",
                    "interval" : "month"
                },
                "aggs": {
                    "sales": {
                        "sum": {
                            "field": "price"
                        }
                    }
                }
            },
            "stats_monthly_sales": {               // 对父聚合的每个桶(每月销售总和)的一些基本信息进行聚合
                "stats_bucket": {
                    "buckets_paths": "sales_per_month>sales"
                }
            }
        }
    }
    //输出结果
    {
       "aggregations": {
          "sales_per_month": {
             "buckets": [
                {
                   "key_as_string": "2015/01/01 00:00:00",
                   "key": 1420070400000,
                   "doc_count": 3,
                   "sales": {
                      "value": 550
                   }
                },
                {
                   "key_as_string": "2015/02/01 00:00:00",
                   "key": 1422748800000,
                   "doc_count": 2,
                   "sales": {
                      "value": 60
                   }
                },
                {
                   "key_as_string": "2015/03/01 00:00:00",
                   "key": 1425168000000,
                   "doc_count": 2,
                   "sales": {
                      "value": 375
                   }
                }
             ]
          },
          "stats_monthly_sales": {        //注意,统计的是桶的信息
             "count": 3,
             "min": 60,
             "max": 550,
             "avg": 328.333333333,
             "sum": 985
          }
       }
    }

    Extended Stats Bucket Aggregation(sibling)

    增强型桶统计聚合——基于兄弟聚合的某个权值,对【桶信息】进行一系列统计学计算(比普通的统计聚合多了一些统计值)。

    用于计算的权值必须是数值类型。

    用于计算的兄弟聚合必须是多桶聚合类型。

    配置参数

    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    • format:该聚合的输出格式定义
    • sigma:偏差显示位置(above/below)

    Percentiles Bucket Aggregation(sibling)

    桶百分比聚合——基于兄弟聚合的某个权值,计算权值的百分百。

    用于计算的权值必须是数值类型。

    用于计算的兄弟聚合必须是多桶聚合类型。

    对百分百的计算是精确的(不像Percentiles Metric聚合是近似值),所以可能会消耗大量内存

    配置参数

    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    • format:该聚合的输出格式定义
    • percents:需要计算的百分百列表(数组形式)

    Moving Average Aggregation(parent)

    窗口平均值聚合——基于已经排序过的数据,计算出处在当前出口中数据的平均值。

    比如窗口大小为 5 ,对数据 1—10 的部分窗口平均值如下:

    • (1 + 2 + 3 + 4 + 5) / 5 = 3
    • (2 + 3 + 4 + 5 + 6) / 5 = 4
    • (3 + 4 + 5 + 6 + 7) / 5 = 5

    配置参数

    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    • window:窗口大小
    • model:移动模型
    • minimize:
    • settings:

    {
        "the_movavg":{
            "moving_avg":{
                "buckets_path": "the_sum",
                "window" : 30,
                "model" : "simple"
            }
        }
    }

    Cumulative Sum Aggregation(parent)

    累计和聚合——基于父聚合(只能是histogram或date_histogram类型)的某个权值,对权值在每一个桶中求所有之前的桶的该值累计的和。

    用于计算的权值必须是数值类型。

    封闭直方图(histogram)聚合的 min_doc_count 必须是 0。

    配置参数

    • buckets_path:用于计算均值的权值路径
    • format:该聚合的输出格式定义
    {
        "aggs" : {
            "sales_per_month" : {
                "date_histogram" : {
                    "field" : "date",
                    "interval" : "month"
                },
                "aggs": {
                    "sales": {
                        "sum": {
                            "field": "price"
                        }
                    },
                    "cumulative_sales": {
                        "cumulative_sum": {
                            "buckets_path": "sales"
                        }
                    }
                }
            }
        }
    }
    //输出
    {
       "aggregations": {
          "sales_per_month": {
             "buckets": [
                {
                   "key_as_string": "2015/01/01 00:00:00",
                   "key": 1420070400000,
                   "doc_count": 3,
                   "sales": {
                      "value": 550
                   },
                   "cumulative_sales": {
                      "value": 550                //总计 sales = 550
                   }
                },
                {
                   "key_as_string": "2015/02/01 00:00:00",
                   "key": 1422748800000,
                   "doc_count": 2,
                   "sales": {
                      "value": 60
                   },
                   "cumulative_sales": {
                      "value": 610               //总计 sales = 550 + 60
                   }
                },

    Bucket Script Aggregation(parent)

    桶脚本聚合——基于父聚合的【一个或多个权值】,对这些权值通过脚本进行运算。

    用于计算的父聚合必须是多桶聚合。

    用于计算的权值必须是数值类型。

    执行脚本必须要返回数值型结果。

    配置参数

    • script:用于计算的脚本,脚本可以是 inline,也可以是 file,还可以是 Scripting 指定的
    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    • format:该聚合的输出格式定义
    {
        "aggs" : {
            "sales_per_month" : {
                "date_histogram" : {
                    "field" : "date",
                    "interval" : "month"
                },
                "aggs": {
                    "total_sales": {
                        "sum": {
                            "field": "price"
                        }
                    },
                    "t-shirts": {
                      "filter": {
                        "term": {
                          "type": "t-shirt"
                        }
                      },
                      "aggs": {
                        "sales": {
                          "sum": {
                            "field": "price"
                          }
                        }
                      }
                    },
                    "t-shirt-percentage": {
                        "bucket_script": {
                            "buckets_path": {                    //对两个权值进行计算
                              "tShirtSales": "t-shirts>sales",
                              "totalSales": "total_sales"
                            },
                            "script": "tShirtSales / totalSales * 100"
                        }
                    }
                }
            }
        }
    }

    Bucket Selector Aggregation(parent)

    桶选择器聚合——基于父聚合的【一个或多个权值】,通过脚本对权值进行计算,并决定父聚合的哪些桶需要保留,其余的将被丢弃。

    用于计算的父聚合必须是多桶聚合。

    用于计算的权值必须是数值类型。

    运算的脚本必须是返回 boolean 类型,如果脚本是脚本表达式形式给出,那么允许返回数值类型。

    配置参数

    • script:用于计算的脚本,脚本可以是 inline,也可以是 file,还可以是 Scripting 指定的
    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    {
        "bucket_selector": {
            "buckets_path": {
                "my_var1": "the_sum",
                "my_var2": "the_value_count"
            },
            "script": "my_var1 > my_var2"    // true 则保留该桶;false 则丢弃
        }
    }

    Serial Differencing Aggregation(parent)

    串行差分聚合——基于父聚合(只能是histogram或date_histogram类型)的某个权值,对权值值进行差分运算,(取时间间隔,后一刻的值减去前一刻的值:f(X) = f(Xt) – f(Xt-n))。

    用于计算的父聚合必须是多桶聚合。

    配置参数

    • lag:滞后间隔(比如lag=7,表示每次从当前桶的值中减去其前面第7个桶的值)
    • buckets_path:用于计算均值的权值路径
    • gap_policy:空桶处理策略(skip/insert_zeros)
    • format:该聚合的输出格式定义

    {
       "aggs": {
          "my_date_histo": {
             "date_histogram": {
                "field": "timestamp",
                "interval": "day"
             },
             "aggs": {
                "the_sum": {
                   "sum": {
                      "field": "lemmings"
                   }
                },
                "thirtieth_difference": {
                   "serial_diff": {
                      "buckets_path": "the_sum",
                      "lag" : 30                        //差分间隔为 30 day
                   }
                }
             }
          }
       }
    }
    时间: 2024-12-23 11:28:50

    aggregation 详解4(pipeline aggregations)的相关文章

    aggregation 详解2(metrics aggregations)

    概述 权值聚合类型从需要聚合的文档中取一个值(value)来计算文档的相应权值(比如该值在这些文档中的max.sum等). 用于计算的值(value)可以是文档的字段(field),也可以是脚本(script)生成的值. 数值权值聚合是特殊的权值聚合类型,因为它的输出权值也是数字. 数值权值聚合(注意分类只针对数值权值聚合,非数值的无此分类)输出单个权值的,叫做 single-value numeric metrics,其它生成多个权值(比如:stats)的被叫做 multi-value num

    aggregation 详解3(bucket aggregation)

    概述 桶分聚合不进行权值的计算,他们对文档根据聚合请求中提供的判断条件(比如:{"from":0,  "to":100})来进行分组(桶分). 桶分聚合还会额外返回每一个桶内文档的个数. 桶分聚合可以包含子聚合——sub-aggregations(权值聚合不能包含子聚合),子聚合将会应用到由父(parent)聚合产生的每一个桶上. 桶分聚合根据聚合条件,可以只定义输出一个桶:也可以输出多个:还可以在根据聚合条件动态确定桶个数(比如:terms aggregation

    Pipeline的入站流程详解(netty源码死磕7)

    精进篇:netty源码死磕7  巧夺天工--Pipeline入站流程详解 1. Pipeline的入站流程 在讲解入站处理流程前,先脑补和铺垫一下两个知识点: (1)如何向Pipeline添加一个Handler节点 (2)Handler的出站和入站的区分方式 1.1. HandlerContext节点的添加 在Pipeline实例创建的同时,Netty为Pipeline创建了一个Head和一个Tail,并且建立好了链接关系. 代码如下: protected DefaultChannelPipel

    [持续交付实践] pipeline:pipeline 使用之语法详解

    一.引言 jenkins pipeline语法的发展如此之快用日新月异来形容也不为过,而目前国内对jenkins pipeline关注的人还非常少,相关的文章更是稀少,唯一看到w3c有篇相关的估计是直接翻译软件翻的,读下来惨不忍睹.没办法,语法详解这章我干脆把jenkins官网上的语法说明全部翻译了一遍,并更新了陈旧的内容(可怜了我大学四级的英语水平~),英语好的朋友也可以直接到官网阅读. 二.语法简介 Pipeline最基本的部分是"step".基本上,step告诉Jenkins 要

    Hadoop Pipeline详解[摘抄]

    最近使用公司内部的一个框架写map  reduce发现没有封装hadoop streaming这些东西,查了下pipeline相关的东西 Hadoop Pipeline详解 20. Aug / hadoop / 1 Comment 一.说明Hadoop 2.x相比较于1.x有了较大的改变,像MapReduce层面架构以及代码基本上是完全重写的,在HDFS层面加入了HA,Federation等特性,代码更加层次化和易读,同时加入的PB初期可能给阅读带来障碍,熟悉之后就没有太大问题了.Pipelin

    StreamSets学习系列之StreamSets的Create New Pipeline(图文详解)

    不多说,直接上干货! 前期博客 StreamSets学习系列之StreamSets的Core Tarball方式安装(图文详解) 欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑   同时,大家可以关注我的个人博客:    http://www.cnblogs.com/zlslch/   和     http://www.cnblogs.com/lchzls/      http://www.cnblogs.com/sunnyDream/       详情请见:htt

    Storm概念、原理详解及其应用(一)BaseStorm

    本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数"wordcount"代码不同的是,并不会有如何运行第一storm代码等内容,只有在运行完代码后,发现需要明白:"知其然,并知其所以然". Storm是什么?为什么要用Storm?为什么不用Spark? 第一个问题,以下概念足以解释: Storm是基于数据流的实时处理系统,提供了大吞吐量的实

    MVC之前的那点事儿系列(3):HttpRuntime详解分析(下)(转载)

    MVC之前的那点事儿系列(3):HttpRuntime详解分析(下) 文章内容 话说,经过各种各样复杂的我们不知道的内部处理,非托管代码正式开始调用ISPAIRuntime的ProcessRequest方法了(ISPAIRuntime继承了IISPAIRuntime接口,该接口可以和COM进行交互,并且暴露了ProcessRequest接口方法).至于为什么要调用这个方法,大叔也不太清楚,找不到微软相关的资料哦.但大叔确定该方法就是我们进入HttpRuntime的正式大门,接着看吧. publi

    POSIX 线程详解(1-概述)

    线程是有趣的 线程类似于进程.如同进程,线程由内核按时间分片进行管理.在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同.而在多处理器系统中,如同多个进程,线程实际上一样可以并发执行. 那么为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同一个变量.所以,程序中的所有线程都可以读或写声明过的全局变量.如果曾用 fork() 编写过重要代码,就会认识到这个工具的重要性.为什么呢?虽然 fork() 允