连续查询是InfluxDB的一种查询类型。它会按照用户指定的查询规则,自动地、周期地查询实时数据并执行指定运算,然后将查询结果保存在一张指定的表中。
通过创建连续查询,用户可以指定InfluxDB执行连续查询的时间间隔、单次查询的时间范围以及查询规则。InfluxDB会根据用户指定的规则,定期的将过去一段时间内的原始时序数据以用户所期望的方式保存至新的结果表中,从而降低存储数据的时间精度,大大减少新表的数据量。同时,将查询结果保存在指定的数据表中,也便于用户直接查询所关心的内容,从而降低查询的运算复杂度,提升查询效率。
基础特性
创建基础连续查询
- cq_name :该条连续查询的名字
- database_name:连续查询所在数据库的名字。
-
cq_query:具体的连续查询语句。
其中,cq_query语法是InfluxQL协议格式的。
- function[s]:要查询的字段及数据处理的内置函数。
- destination_measurement:保存查询结果的目标表;若目标表不存在,InfluxDB自动创建。
- measurement连续查询语句所查询的目标表
- stuff具体的查询条件,可选参数
- interval连续查询语句执行的时间间隔与查询的时间范围。
- tag_key[s]归类的标签字段,可选参数
注意:InfluxDB在执行连续查询语句时,会根据time(interval) 的值自动生成查询时间范围。因此,用户在创建连续查询语句时,不需要在WHERE子句的查询条件中指定时间范围,且在WHERE条件中指定的时间范围都会被忽略掉
。
例:创建一条连续查询,按照指定时间间隔和标签对指定数据进行采样。
create continuous query my_first_basic_cq on cq_test_db
begin
select max(cpu_usage) into basic_cq_result from cpu_usage_detail group by time(1h) ,ip
end
解释:每小时定期去查cpu_usage_detail表,按服务器ip聚合,统计过去1小时内每个IP的最大CPU利用率cpu_usage,并将结果保存在表basic_cq_result中。
连续查询的执行时间及查询时间范围
group by time()指定的时间既决定了连续查询每次执行的时间间隔,也决定了连续查询的查询时间范围。基于本地服务器的时间,在预设的时间节点开始执行这些连续查询。influxDB会在每个小时开始的时候执行连续查询语句,如11:00,12:00,13:00
infulxDB首先通过now()函数获取当前时间,再用当前时间减去group by time()指定的时间间隔。这两个时间点之间的左闭合开区间就是连续查询语句查询时间范围。例如,时间长度是1小时,执行时间点是12:00,那么所查时间范围就是11:00~11:59.9999999。
高级特性
创建高级连续查询
高级连续查询语法:
用户通过RESAMPLE子句分别指定更具体的时间间隔和时间范围。
管理连续查询
查询已创建的连续查询语句
show continuous queries
删除已存在的连续查询语句
drop continuous query <cq_name> on <database>
-修改已存在的连续查询语句
不支持,需先删除再创建