首页/数据/NoSQL 速查/Flux 查询基础

Flux 查询基础

Flux 是管道式查询语言:from 选择 bucket,range 限定时间范围,filter 用 lambda 过滤,后续接 group/aggregate/mean 等函数;range 应尽量靠前以利用时间裁剪。

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

Flux 是什么

Flux 是 InfluxDB 2.x 的管道式查询语言:from 选择 bucket,range 限定时间范围,filter 用 lambda 表达式过滤记录,后面再接 group、aggregateWindow、mean 等函数处理。每个 |> 把上一步的结果交给下一步,因此把 range 放在管道前段是性能优化的第一原则。

基本信息

结构from(bucket:) |> range(start:) |> filter(fn:) |> …
常用函数filter、group、aggregateWindow、mean、sum、count、last、pivot
过滤写法filter(fn: (r) => r._measurement == "cpu" and r.host == "web-1")
系统列下划线开头:_measurement、_field、_value、_time、_start、_stop
适用版本InfluxDB 2.x;1.x 使用 InfluxQL

典型使用场景

  • 按时间范围查指标并计算均值、最大值
  • 多维度分组统计:按 host、region 分别聚合
  • 数据下采样:把原始精度聚合成小时或天级
  • 结果整形:用 pivot 把字段列转成表格结构
  • 为定时任务与告警规则提供查询逻辑

常用查询

常用查询
from(bucket: "metrics")
  |> range(start: -1h)                          // 时间范围,尽量放前面
  |> filter(fn: (r) => r._measurement == "cpu") // 先缩小 measurement
  |> filter(fn: (r) => r._field == "usage")      // 指定要聚合的字段
  |> filter(fn: (r) => r.host == "web-1")        // 标签过滤
  |> mean()                                     // 聚合计算

// 多维度分组统计
from(bucket: "metrics")
  |> range(start: -6h)
  |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage")
  |> group(columns: ["host"])
  |> mean()

管道函数读法

函数作用注意
from选择数据来源 bucket必须先于其他操作
range限定时间范围越靠前越好,靠后会放大扫描量
filter用 lambda 过滤记录== 比较对类型敏感
group按列分组后聚合不写 group 时按默认分组键聚合
aggregateWindow按固定时间窗口聚合窗口按 UTC 对齐,可用 offset 调整
下划线开头的列是系统列:_measurement、_field、_value、_time、_start、_stop;标签列名不带下划线。把 measurement 与 field 的过滤写在管道前段,能显著减少后续处理的数据量。
想在同一查询里同时输出原始点与聚合结果,要用两个分支管道分别 yield 并命名,否则结果会在同一个表流里混在一起;yield 的名字会出现在返回结果中,方便上层区分用途。
Flux 返回的是表流:分组键不同的数据会拆成多张表。在图表工具里看到多条曲线,通常是分组键不同造成的,而不是数据被重复写入,先看 group 与标签再判断。
时间范围内的数据量决定了查询代价,不加 range 或把范围放得过宽会扫描大量数据点;在仪表盘上按秒刷新时应把 range 收紧到画布实际需要的时间窗,而不是统一用很大的起始范围。

易错点

  • filter 里的 == 比较对类型敏感,数值字段写成字符串比较会静默返回空结果,排查时先确认字段类型
  • range 放在管道后段,引擎会扫描超出需要的时间段,性能优化要先检查它的位置
  • 忘记指定 _field,多个字段的数据会被一起聚合,结果混在一起无法解释
  • group 不写或列名写错,聚合维度与预期不符,结果看起来正常但口径完全错误

数据来源与参考

  • InfluxData Docs: Query data with Flux
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌