首页/数据/NoSQL 速查/Flux aggregateWindow 时间窗口聚合

Flux aggregateWindow 时间窗口聚合

aggregateWindow 按固定时间窗口聚合(如每 5 分钟取均值):every 定义窗口、fn 定义聚合函数,createEmpty 决定空窗口是否补值,timeSrc 决定结果时间戳来源。

NoSQL 速查数据更新于 2026-10-13

aggregateWindow 做什么

aggregateWindow 按固定时间窗口把数据聚合起来:every 定义窗口长度,fn 指定聚合函数,createEmpty 决定没有数据的窗口是否补空值。它是把高频原始数据整理成图表可读曲线的核心函数,也是降采样任务里的主要构件。

基本信息

语法|> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
常用参数every、period、offset、fn(mean/max/min/sum/count/last)、createEmpty、timeSrc
补值createEmpty: true 用空值补齐无数据窗口,时间轴更连续
窗口对齐窗口按 UTC 对齐,需要本地零点对齐时用 offset 调整
输出时间戳timeSrc 决定结果时间取窗口起点还是结束时间

典型使用场景

  • 把秒级原始指标聚合成 5 分钟曲线,降低绘图点数
  • 降采样任务:每小时聚合均值与最大值写入另一个 bucket
  • 跨主机汇总统计:先按标签分组再按窗口聚合
  • 告警判定:在时间窗口内统计错误数量
  • 补齐缺失窗口,避免图表时间轴出现断裂

常用写法

常用写法
from(bucket: "metrics")
  |> range(start: -6h)
  |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage")
  |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
  |> yield(name: "cpu_5m_avg")

// 同时输出均值与最大值:两个分支各自 yield 并命名
from(bucket: "metrics")
  |> range(start: -6h)
  |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage")
  |> aggregateWindow(every: 5m, fn: max)
  |> yield(name: "cpu_5m_max")

// 按本地时区零点对齐窗口
from(bucket: "metrics")
  |> range(start: -1d)
  |> aggregateWindow(every: 1h, fn: mean, offset: -8h)

参数与取舍

参数作用注意
every窗口长度小于原始采样间隔会出现锯齿
fn聚合函数常用 mean / max / min / sum / count / last
createEmpty空窗口是否补值补值让曲线连续,但会增加返回点数
offset窗口边界偏移用于按本地零点对齐
timeSrc结果时间戳取窗口起点或终点影响图表上的点落在哪个位置
窗口按 UTC 对齐,需要本地零点对齐时用 offset 调整;跨夏令时的地区要确认对齐行为是否符合预期,否则按天聚合的边界会漂移。
同时输出多个聚合结果时要用多个分支分别 yield 并命名,否则结果会混在同一个表流里,上层无法区分哪个是均值、哪个是最大值。

易错点

  • every 小于原始采样间隔时会引入锯齿与重复统计,先确认原始数据精度再定窗口长度
  • 同时输出多个聚合结果却只写一个管道,结果混在一个表流里无法区分,必须用多个分支加 yield 命名
  • createEmpty 打开后会补齐大量空窗口,长时间范围的查询返回点数骤增,仪表盘上要按需开启
  • 跨时区或跨夏令时场景直接用 every: 1d,窗口边界会随 UTC 偏移变化,按天统计前要先确认对齐方式

数据来源与参考

  • InfluxData Docs: aggregateWindow()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌