文章目录
- 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。