当前位置: 首页 > news >正文

第三阶段 27 · pipeline 管道聚合(同比/环比/累计/移动平均)

阶段:第三阶段补充 / 聚合能力
ES:pipeline aggregation | PostgreSQL:窗口函数(SUM() OVERLAG()


1. 概念

前面 20–24 篇的聚合都是对文档算(指标、分桶)。
管道聚合(pipeline agg)不碰文档,而是拿「其它聚合的结果」再算一层——
比如对每月的销售额桶,算累计值、环比增长、移动平均。

两类:

类型作用典型
parent(父管道)同级桶序列上算新指标,结果写回每个桶cumulative_sumderivativemoving_fn
sibling(兄弟管道)整组桶汇总出一个值max_bucketavg_bucketsum_bucket

关键:管道聚合用buckets_path指向要引用的聚合结果(像“公式引用单元格”)。


2. PostgreSQL 对照

-- 每月销售额 + 累计 + 环比(窗口函数)SELECTmonth,SUM(amount)ASmonthly,SUM(SUM(amount))OVER(ORDERBYmonth)AScumulative,-- cumulative_sumSUM(amount)-LAG(SUM(amount))OVER(ORDERBYmonth)ASmom-- derivativeFROMsalesGROUPBYmonthORDERBYmonth;

ES 的管道聚合就是 ES 版「对分组结果再套窗口函数」。


3. ES DSL

3.1 累计求和 + 环比(parent 管道)

GET sales_idx/_search { "size": 0, "aggs": { "by_month": { "date_histogram": { "field": "invoice_dt", "calendar_interval": "month" }, "aggs": { "monthly": { "sum": { "field": "amount" } }, "cumulative": { "cumulative_sum": { "buckets_path": "monthly" } // 累计 }, "mom": { "derivative": { "buckets_path": "monthly" } // 环比差值 }, "moving_avg_3": { "moving_fn": { // 3 期移动平均 "buckets_path": "monthly", "window": 3, "script": "MovingFunctions.unweightedAvg(values)" } } } } } }

3.2 找销售额最高的月份(sibling 管道)

GET sales_idx/_search { "size": 0, "aggs": { "by_month": { "date_histogram": { "field": "invoice_dt", "calendar_interval": "month" }, "aggs": { "monthly": { "sum": { "field": "amount" } } } }, "best_month": { "max_bucket": { "buckets_path": "by_month>monthly" } // > 表示钻进子聚合 } } }

buckets_path语法:聚合名>子聚合名>是“进入下一层桶”,类似路径分隔符。


4. Spring Boot 实现

@ComponentpublicclassDoc27PipelineAgg{@AutowiredprivateElasticsearchClientelasticsearchClient;/** 每月销售额 + 累计值 */publicMap<String,Double[]>monthlyWithCumulative(StringindexName)throwsIOException{SearchResponse<Void>resp=elasticsearchClient.search(s->s.index(indexName).size(0).aggregations("by_month",a->a.dateHistogram(dh->dh.field("invoice_dt").calendarInterval(CalendarInterval.Month)).aggregations("monthly",m->m.sum(su->su.field("amount"))).aggregations("cumulative",c->c.cumulativeSum(cs->cs.bucketsPath(bp->bp.single("monthly"))))),Void.class);Map<String,Double[]>out=newLinkedHashMap<>();for(DateHistogramBucketb:resp.aggregations().get("by_month").dateHistogram().buckets().array()){doublemonthly=b.aggregations().get("monthly").sum().value();// 管道聚合结果也是一个 simpleValuedoublecumulative=b.aggregations().get("cumulative").simpleValue().value();out.put(b.keyAsString(),newDouble[]{monthly,cumulative});}returnout;}}

import:...aggregations.CalendarInterval...aggregations.DateHistogramBucket
管道聚合结果读取用.simpleValue().value()cumulative_sum/derivative/moving_fn都是)。
buckets_path在客户端用BucketsPath:单路径bp.single("monthly")


5. 坑与最佳实践

  1. 管道聚合依赖“有序桶序列”:多和date_histogram/histogram搭配,桶要按序。
  2. derivative首个桶没有环比值(没有前一项),前端要容错。
  3. buckets_path写错最常见:层级用>,名字要和上面的聚合名完全一致。
  4. gap_policy:桶里缺值(某月无数据)时用skip/insert_zeros控制行为,避免断链。
  5. moving_avg已废弃,用moving_fn+ Painless(如MovingFunctions.unweightedAvg)。

下一篇

30-index-document-写入.md(进入第四阶段:写入与索引管理)。


http://www.jsqmd.com/news/1321146/

相关文章:

  • 园洲夜宵店实地测评:万州霸道烤鱼本地人常去游客爱打卡 - 产品推荐官
  • 网盘直链下载助手:免费解锁八大网盘高速下载的终极解决方案
  • 线性与非线性回归实战:从最小二乘法到过拟合防范
  • 天线核心性能参数解析:从辐射效率到极化匹配的工程实践指南
  • GIS与CAD数据转换实战:从Shapefile到DWG的完整流程与避坑指南
  • Keyviz:让键盘鼠标操作“看得见“的开源可视化神器
  • Unity UGUI虚线绘制全攻略:从Shader实现到性能优化
  • 第四阶段 32 · update_by_query / delete_by_query 条件更新删除
  • 标书从业者选型参考:2026年标书AI 自动生成工具测评推荐清单
  • AI接单冷启动困局破解:0粉丝如何用1条技术短视频撬动37个精准询盘(含脚本模板+数据看板)
  • 2026年外贸建站平台怎么选:从技术架构到运营效率的决策指南 - 外贸营销驿站
  • Krita AI Diffusion插件中Cinematic Photo (XL)数据类型冲突的全面诊断与修复指南
  • VC++ Build Tools 2015离线安装包制作与部署全攻略
  • 订货小程序推荐适合零售门店的:能看懂“需求天气”的平台更值得选
  • 办公效率提升方案,OpenClaw 本地智能体搭建攻略(含安装包)
  • Windows 7系统下JDK 1.8环境变量配置与多版本管理实战指南
  • AI协作新范式:6个顶级Skill提升Claude、GPT生产力
  • 2026口碑好的石家庄装修设计公司 实力排名7条对比参考 - 产品评测官
  • 【AI大模型原理与API使用】
  • 零基础Python实战入门:从环境搭建到项目开发的避坑指南
  • 如何用YDFID-1色织物缺陷检测数据集彻底改变纺织质检效率
  • 大模型 API 平台哪家划算:自研直营、聚合平台、混合方案三类全拆解
  • FastbootEnhance:告别命令行恐惧,用图形化界面轻松管理安卓设备
  • AI模型不是越“大”越好!:拆解Transformer架构下参数量、上下文窗口与任务泛化能力的非线性阈值关系
  • 2026年压铸模具顶针润滑脂行业趋势及代表性品牌选型指南 - 汇聚至此
  • 百度网盘高速下载终极方案:pan-baidu-download完整使用指南
  • 利用大语言模型构建游戏角色深度分析与内容创作辅助工作流
  • 广州黄金回收实名登记新规解读,合规交易全程可溯源 - 日常比对手册
  • 光传感器选型实战指南:从BH1750到TSL2561的物联网应用解析
  • Unet上采样技术解析:反卷积原理、实现与优化实战