Continuous Query
基本语法格式:
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
BEGIN
<cq_query>
END
cq_query格式:
SELECT <function[s]> INTO <destination_measurement>
FROM <measurement> [WHERE <stuff>]
GROUP BY time(<interval>,<offset>)[,<tag_key[s]>]
CQ操作的是实时数据,使用本地服务器的时间戳。其中:
WHERE条件:设置非时间条件
GROUP BY time(interval,offset):单次查询的时间范围为now()-interval到now()(整点到整点)。若指定了offset参数,则从整点向后偏移offset时长。
- 列表内容
设置retention policy不为默认autogen的cq_query格式
SELECT <function[s]> INTO <database>.<retention policy>.<destination_measurement>
FROM <measurement> [WHERE <stuff>]
GROUP BY time(<interval>,<offset>)[,<tag_key[s]>]
destination_measurement之前要加上database.retention_policy.
- 高级语法
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
RESAMPLE EVERY <interval> FOR <interval>
BEGIN
<cq_query>
END
CQ的执行时间和查询时间范围则与RESAMPLE里面的两个interval有关。以EVERY interval的时间间隔执行,执行时查询的时间范围则是FOR interval来确定。
1. 只配置执行时间
执行时间根据every interval,查询时间范围根据group by time()。
当time>interval,例如interval=30m,time(1h),at 8:30时间范围为8:00-9:00;at 9:00时间范围为8:00-9:00,且后一条查询结果覆盖前一条。
2. 只配置查询时间范围
执行时间根据group by time(),查询时间范围根据for interval。
3. 同时配置
example:
CREATE CONTINUOUS QUERY "cq_advanced_every_for" ON "transportation"
RESAMPLE EVERY 1h FOR 90m
BEGIN
SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(30m)
END
执行间隔为1小时,而查询范围90分钟,最后分组是30分钟,每次插入了三条记录
At 8:00 cq_advanced_every_for 查询时间范围 time >= '6:30' AND time < '8:00'.
name: average_passengers
------------------------
time mean
2016-08-28T06:30:00Z 3
2016-08-28T07:00:00Z 6.5
2016-08-28T07:30:00Z 7.5
At 9:00 cq_advanced_every_for 查询时间范围 time >= '7:30' AND time < '9:00'.
name: average_passengers
------------------------
time mean
2016-08-28T07:30:00Z 7.5
2016-08-28T08:00:00Z 11.5
2016-08-28T08:30:00Z 16
最终结果:
name: average_passengers
------------------------
time mean
2016-08-28T06:30:00Z 3
2016-08-28T07:00:00Z 6.5
2016-08-28T07:30:00Z 7.5
2016-08-28T08:00:00Z 11.5
2016-08-28T08:30:00Z 16