文章目录

  • InfluxDB 连续查询的定义
  • InfluxDB 连续查询的目的
  • InfluxDB 连续查询操作


在前面介绍了 InfluxDB的数据保留策略,数据超过保存策略里指定的时间之后,就会被删除。

但是如果我们不想完全将这些数据删除掉,就需要连续查询(Continuous Queries)的帮助了。

连续查询主要用在将数据归档,以降低系统空间的占用率,主要是以降低精度为代价。

InfluxDB 连续查询的定义

InfluxDB 的连续查询是在数据库中自动定时启动的一组语句,语句中必须要包含 select关键字和group by time() 关键字
influxDB 会将查询结果放在指定的数据表中。

InfluxDB 连续查询的目的

使用连续查询是最优降低采样率的方式,连续查询和存储策略搭配使用将会大大降低 InfluxDB 的系统占用量。
而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便

InfluxDB 连续查询操作

新建连续查询

语法如下:

create continuous query <cq_name> on <database_name>
begin select <function>(<stuff>)[,<function>(<stuff>)] into <different_measurement> 
from <current_measurement> [where <stuff>] group by time(<interval>)[,<stuff>] 
end

查询部分被 create continuous query […] begin 和 end 所包含,主要的逻辑代码也是在这一部分。

使用实例:

create continuous query cq_30m on test 
begin 
	select mean(used) 
	into mem_used_30m 
	from mem 
	group by time(30m) 
end

在 test 库中新建一个名为 cq_30m 的连续查询,每 30 分钟取一个used 字段的平均值放到 mem_used_30m 表中。

显示所有已存在的连续查询

show continuous queries

删除连续查询

drop continuous query <cq_name> on <database_name>

指定连续查询的时间范围

可以使用RESAMPLE FOR 关键词来指定连续查询的时间范围,比如,每次执行都对1小时内的数据进行连续查询:

select continuous query vampires_1 on teansylvania resample for 60m 
begin 
	select count(dracula) 
	into vampire_populations_1 
	from raw_vampires 
	group by time(30m)
end

这个语句每次会将1小时的数据执行连续查询,也就是说,每次执行时,会将now()到now()-30m和now()-30m到now()-60m分别做连续查询,这样我们就可以手动指定连续查询的时间范围了。

指定连续查询的执行频次

可以使用RESAMPLE EVERY 关键词来指定连续查询的执行频次,比如,指定连续查询的执行频次为每15m执行一次:

select continuous query vampires on teansylvania resample every 15m
begin 
	select count(dracula) 
	into vampire_populations_1 
	from raw_vampires 
	group by time(30m)
end

这样,连续查询会每隔15m执行一次。

同时指定连续查询的范围和频次

将RESAMPLE FOR 和 EVERY关键词同时使用,可以同时指定连续查询的范围和频次,如下:

select continuous query vampires_2 on teansylvania resample every 15m for 60m
begin 
	select count(dracula) 
	into vampire_populations_2 
	from raw_vampires 
	group by time(30m)
end

这个语句指定连续查询每15m执行一次,每次执行的范围为60m。