首页/数据/NoSQL 速查/1.x 连续查询(continuous query)

1.x 连续查询(continuous query)

连续查询是 1.x 的自动降采样机制:按固定间隔对原始数据聚合写入另一个测量或 RP,实现长期保留的低精度数据。

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

连续查询做什么

连续查询(CQ)是 InfluxDB 1.x 内置的自动降采样机制:按固定时间窗口对原始数据做聚合,把结果写入另一个测量或另一个保留策略。它由数据库自身按窗口调度,不依赖外部脚本,是实现「高精度短期保留 + 低精度长期保留」的标准做法,通常与多个保留策略配合使用。

基本信息

适用版本InfluxDB 1.x(2.x 的任务机制取代了该能力)
语法CREATE CONTINUOUS QUERY "cq" ON "db" BEGIN SELECT … INTO … FROM … GROUP BY time(…), * END
重算窗口RESAMPLE EVERY <间隔> FOR <时长> 可控制执行频率与回算范围
查看SHOW CONTINUOUS QUERIES
删除DROP CONTINUOUS QUERY "cq" ON "db"
调度方式由数据库按时间窗口自动运行,无需外部定时任务

典型使用场景

  • 分层保留:原始数据保留数天,聚合结果保留数月至数年
  • 固定报表口径:把小时级或天级均值固化成稳定的查询目标
  • 降低查询压力:大范围趋势查询直接读聚合表,不再扫描原始数据
  • 配合降精度策略:不同精度写入不同保留策略,过期清理互不影响
  • 口径集中维护:聚合逻辑写在 CQ 里,避免各系统各自实现一遍

创建与查看

创建与查看
CREATE CONTINUOUS QUERY "cq_cpu_hourly" ON "metrics"
BEGIN
  SELECT mean("usage") AS usage
  INTO "metrics"."rp_2y"."cpu_hourly"   -- 目标必须是不同测量或不同保留策略
  FROM "cpu"
  GROUP BY time(1h), *                    -- GROUP BY time 是 CQ 的核心,* 保留全部标签维度
END

SHOW CONTINUOUS QUERIES;

-- 启用前的历史数据不会自动进入聚合表,需要手工回补一次
-- SELECT mean("usage") INTO "metrics"."rp_2y"."cpu_hourly" FROM "cpu"
--   WHERE time < now() - 1h GROUP BY time(1h), *

关键要素读法

要素含义注意点
GROUP BY time(1h)聚合窗口必须存在,否则 CQ 无法按窗口运行
GROUP BY …, *保留全部标签维度漏掉 * 会把多维数据压成一维
INTO 目标写入位置与源同名同策略会自读自写,必须指明不同的策略或测量
RESAMPLE执行频率与回算范围回算过短会漏掉迟到数据,过长会重复计算
创建时间只影响之后的新数据历史数据必须显式回补
CQ 与保留策略是配套使用的:短期策略存原始精度、长期策略存聚合结果,只建一个长期策略而不配搬运任务,长期策略里不会有任何数据。
启用 CQ 前先做一次历史回补并核对聚合结果:否则报表会出现「新数据有、旧数据缺」的断层,且不会有任何报错提示。

易错点

  • CQ 只对启用之后写入的数据生效:历史数据不会自动进聚合表,必须手工回补一次
  • INTO 目标写成与源同名同保留策略:自读自写造成数据反复被聚合,结果持续失真
  • 漏写 GROUP BY 里的 *:标签维度被压缩,按主机或区域下钻时查不到数据
  • RESAMPLE 回算窗口短于数据迟到时长:迟到写入的点永远不会被聚合,长期呈现低位偏差

数据来源与参考

  • InfluxData Docs: Continuous queries
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌