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

时序数据库flux aggregateWindow命令详解

在 InfluxDB 的 Flux 语言中,aggregateWindow() 是一个用于时间序列数据聚合的核心函数,它能按照指定的时间窗口对数据进行分组,并对每个窗口内的数据应用聚合函数(如求和、平均值等)。这在处理时序数据时非常实用,比如将秒级数据聚合为分钟级、小时级等。

基本语法

aggregateWindow(every: duration,        // 窗口大小(必填)fn: (column, tables) => any,  // 聚合函数(必填)column: string,         // 要聚合的列名(可选,默认是 "_value")timeSrc: string,        // 时间列来源(可选,默认是 "_time")timeDst: string,        // 聚合后时间列的名称(可选,默认是 "_time")createEmpty: bool       // 是否保留空窗口(可选,默认是 false)
)

参数详解

  1. every(必填)
    定义时间窗口的大小,即每隔多久聚合一次。支持的时间单位:ns(纳秒)、us(微秒)、ms(毫秒)、s(秒)、m(分钟)、h(小时)、d(天)、w(周)等。
    示例:every: 1m(1 分钟窗口)、every: 1h(1 小时窗口)。

  2. fn(必填)
    用于聚合窗口内数据的函数。Flux 内置了常用聚合函数,如:

    • mean():平均值
    • sum():求和
    • max():最大值
    • min():最小值
    • count():计数
      示例:fn: mean 表示计算每个窗口内的平均值。
  3. column(可选)
    指定要聚合的字段列名,默认是 _value(InfluxDB 中存储数值的默认列)。
    示例:column: "temperature" 表示聚合 temperature 列。

  4. timeSrc(可选)
    指定原始时间列的名称,默认是 _time(InfluxDB 中存储时间的默认列)。一般无需修改,除非自定义了时间列。

  5. timeDst(可选)
    指定聚合后时间列的名称,默认是 _time。聚合后的时间通常是窗口的起始时间(或结束时间,取决于数据对齐方式)。

  6. createEmpty(可选)
    布尔值,指定是否保留没有数据的空窗口。默认是 false(不保留空窗口);设为 true 时,空窗口会显示 null 或 0(取决于聚合函数)。

使用示例

假设我们有一张名为 sensor_data 的表,包含 _time(时间)、_value(数值)、sensor_id(传感器 ID)字段,记录了传感器的温度数据(每秒一条)。

示例 1:按 10 分钟窗口聚合,计算平均温度
from(bucket: "my-bucket")|> range(start: -1h)  // 取过去1小时的数据|> filter(fn: (r) => r._measurement == "sensor_data" and r._field == "temperature")|> aggregateWindow(every: 10m,       // 每10分钟一个窗口fn: mean,         // 计算平均值column: "_value"  // 聚合_value列(默认可省略))|> yield(name: "mean_temperature")

结果会将过去 1 小时的数据按 10 分钟分组,每组计算一个平均温度。

示例 2:保留空窗口,按 1 小时聚合求和
from(bucket: "my-bucket")|> range(start: -1d)  // 取过去1天的数据|> filter(fn: (r) => r._measurement == "energy" and r._field == "consumption")|> aggregateWindow(every: 1h,fn: sum,createEmpty: true  // 保留无数据的小时窗口(显示0))|> yield(name: "hourly_energy_sum")
示例 3:按标签分组后聚合

如果数据有多个标签(如不同传感器),可先按标签分组再聚合:

from(bucket: "my-bucket")|> range(start: -6h)|> filter(fn: (r) => r._measurement == "sensor_data" and r._field == "humidity")|> group(columns: ["sensor_id"])  // 按传感器ID分组|> aggregateWindow(every: 30m,fn: max  // 每个传感器每30分钟的最大湿度)|> yield(name: "max_humidity_per_sensor")

注意事项

  • 窗口对齐aggregateWindow() 的窗口默认对齐到 Unix 时间起点(如 00:00、00:10、00:20 等),而非数据的第一条记录时间。
  • 与 window() 的区别window() 仅按时间分组,不做聚合;aggregateWindow() 是 window() + 聚合函数的组合,更简洁。
  • 性能:对大量数据聚合时,建议通过 range() 限制时间范围,或通过 filter() 过滤不必要的数据,提升效率。

通过 aggregateWindow(),可以灵活地将高频时序数据降采样为低频数据,便于分析和可视化。

http://www.dtcms.com/a/315748.html

相关文章:

  • Baumer相机如何通过YoloV8深度学习模型实现道路场所路人口罩的检测识别(C#代码UI界面版)
  • 概率论之条件概率
  • ubuntu自动重启BUG排查指南
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(六)
  • Go 单元测试:如何只运行某个测试函数(精确控制)
  • C++ 网络编程入门:TCP 协议下的简易计算器项目
  • 【STM32】HAL库中的实现(四):RTC (实时时钟)
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(14):文法:ていく+きた+单词
  • MQTT学习
  • Starrocks 关于 trace 命令的说明
  • C# --- 本地缓存失效形成缓存击穿触发限流
  • 【面向对象】面向对象七大原则
  • 【乐企板式文件生成工程】关于乐企板式文件(PDF/OFD/XML)生成工程介绍
  • [2401MT-B] 面积比较
  • 翻译的本质:人工翻译vs机器翻译的核心差异与互补性
  • Starrocks中的 Query Profile以及explain analyze及trace命令中的区别
  • MySQL 中 VARCHAR 和 TEXT 的区别
  • 智慧酒店:科技赋能下的未来住宿新体验
  • Spring-rabbit使用实战六
  • 国产三防平板电脑是什么?三防平板推荐
  • Spark内核调度
  • RTC实时时钟RX8900SA国产替代FRTC8900S
  • 使用maven-shade-plugin解决es跨版本冲突
  • 微信小程序功能实现:页面导航与跳转
  • jenkins插件Active Choices的使用通过参数动态控制多选参数的选项
  • LHA6958D是一款代替AD7606的芯片
  • 【前端】网站favicon图标制作
  • MyBatisPlus查询数据库中所有表的数据(AI)
  • 使标签垂直水平居中的多种方法
  • 自动驾驶控制算法——MPC控制算法