首页/数据/NoSQL 速查/InfluxQL 查询(v1 语法)

InfluxQL 查询(v1 语法)

InfluxQL 是 1.x 与兼容层的 SQL 风格查询语言:SELECT … FROM … WHERE time … GROUP BY time(interval), tag;保留像素 GROUP BY time 与 fill() 这样的时序特性。

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

InfluxQL 是什么

InfluxQL 是 InfluxDB 1.x 的 SQL 风格查询语言,也是 2.x 兼容层提供的查询方式。它保留了时序特有语法:时间范围用 time 条件表达,按时间窗口聚合用 GROUP BY time(interval),缺失窗口用 fill() 补值,标签维度直接写在 GROUP BY 里。理解这三点就能读懂绝大多数 InfluxQL 查询。

基本信息

基本结构SELECT 函数("字段") FROM "表" WHERE time > now() - 1h GROUP BY time(5m), "标签"
常用函数mean、sum、max、min、count、percentile、derivative、non_negative_derivative、integral
补值方式fill(null|0|previous|linear),具体支持程度以版本文档为准
时区处理时间边界默认按 UTC 计算,展示时区用 tz('Asia/Shanghai')
元数据查询SHOW MEASUREMENTS / SHOW TAG KEYS / SHOW FIELD KEYS
适用版本InfluxDB 1.x 原生;2.x 通过兼容查询接口提供,语法以官方兼容说明为准

典型使用场景

  • 按时间窗口看趋势:监控指标按 5 分钟或 1 小时求均值
  • 按标签维度分组对比:同一指标按主机、区域或集群拆分看
  • 补零展示:前端图表需要连续时间点,用 fill(0) 或 fill(null) 保证间隔均匀
  • 速率与增量:用 derivative 从累计计数器得到每秒速率
  • 降采样落库:把原始精度的数据按月聚合成低精度数据,用 INTO 写回另一个测量
  • 定位数据是否存在:先查 SHOW MEASUREMENTS 与时间范围,再写具体查询

示例

示例
SELECT mean("usage") AS cpu
FROM "cpu"
WHERE time > now() - 6h AND "host" = 'web-1'   -- 时间范围与标签过滤
GROUP BY time(5m), "region"                    -- 时间窗口 + 标签维度
fill(null)                                     -- 空窗口不补零,前端按 null 断点处理
tz('Asia/Shanghai');                           -- 按本地时区返回时间戳

-- 先看有哪些测量与标签,避免凭记忆写错名字
SHOW MEASUREMENTS LIMIT 20;
SHOW TAG KEYS FROM "cpu";

-- 累计计数器求速率(每秒变化量),负值截断为不输出
SELECT non_negative_derivative(mean("net_bytes"), 1s) FROM "net" WHERE time > now() - 1h GROUP BY time(1m);

函数与语法读法

写法含义易错点
GROUP BY time(5m)按 5 分钟窗口聚合窗口起点是整点对齐,不是查询起始时间
fill(0)空窗口补 0会掩盖真实缺数据,展示前想清楚是否需要
fill(null)空窗口留空图表按断点渲染,需前后端约定
derivative / non_negative_derivative求相邻窗口差值(速率)对非累计值使用会得到无意义结果
percentile("latency", 95)百分位统计窗口内样本过少时结果波动大
SELECT ... INTO把结果写入另一个测量或保留策略需确认目标库与 RP 的写入权限与命名
未聚合的字段必须出现在 GROUP BY 中,否则报错或语义不符合预期;标签(tag)与字段(field)在查询里的写法都是双引号,但只有标签能用于 GROUP BY 分组。
迁移到 2.x 前先验证查询兼容性:数据模型的标签与字段映射、INTO 写入、部分函数在不同版本上行为有差异,按官方兼容说明逐条对照测试。

易错点

  • SELECT 里写了未聚合字段却没放进 GROUP BY:直接报错,或在不同版本上被静默忽略而结果不符合预期
  • 时区处理想当然:时间边界按 UTC 计算,展示时若不使用 tz() 转换,跨时区的日报会整体偏移一天
  • GROUP BY time 的窗口对齐方式没理解:窗口边界与查询起始时间不一致,首末窗口数据容易被误判为缺失
  • 用 fill(0) 掩盖采集中断:图表看起来连续平坦,实际那段是缺数据而非指标为零

数据来源与参考

  • InfluxData Docs: InfluxQL
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌