连续查询(CQ)是时序引擎自动定期执行的查询任务。本文介绍创建、查看和删除连续查询的SQL语法。
前提条件
以下语法仅适用于时序引擎。无版本要求。
CREATE CONTINUOUS QUERY
您可以通过在CREATE CONTINUOUS QUERY语法中配置数据写入规则,完成定期连续查询任务的创建。
语法
create_cq_statement ::= CREATE CONTINUOUS QUERY [database_identifier.] cq_identifier WITH ( cq_attribute_statement ) AS insert_select_statement
cq_attribute_statement ::= attribute_definition (',' attribute_definition)*
attribute_definition ::= attr_identifier '=' attr_val使用说明
数据库名(database_identifier)
持续查询对象所属数据库的名称,不指定时默认是当前数据库。使用时必须在数据库名前后添加反引号(`),例如 `db_sensor`。
持续查询名称(cq_identifier)
使用时必须在持续查询名称前后添加反引号(`),例如 `my_cq`。
持续查询配置项(cq_attribute_statement)
cq_attribute_statement为持续查询的详细配置。支持的配置参数请参见下表。
参数 | 类型 | 是否必选 | 说明 |
interval | STRING | 是 | 用于指定持续查询的计算间隔,即计算任务的执行间隔。最小单位为秒。 格式为 其中:
|
window | STRING | 否 | 用于指定持续查询的计算窗口,即每次计算所覆盖的数据的时间范围。若不指定,则计算窗口与执行间隔(interval)相同。例如, 计算窗口为左闭右开的时间区间。 格式为 其中:
|
offset | STRING | 否 | 指定窗口偏移。默认窗口是按照 格式为 其中:
|
数据写入语句(insert_select_statement)
insert_select_statement的语法说明,请参见数据写入。
指定insert_select_statement时可以不用指定查询的时间范围,引擎会自动在当前时间窗口内进行计算。
SELECT子句的列数需要和目标表一致,包含Field和Tag。
示例
以下示例创建了一个持续查询:每小时计算过去两个小时内原始时序表sensor中的每小时平均温度和每小时平均湿度,并将数据写入数据库default中的表sensor 中。
CREATE CONTINUOUS QUERY `default`.`my_cq` WITH (`INTERVAL`='1h', `WINDOW`='2h') AS
INSERT INTO `default`.`sensor`
SELECT AVG(`temperature`) AS `temperature`,
AVG(`humidity`) AS `humidity`, `device_id`, `region`
FROM `default`.`sensor`
SAMPLE BY 1h;SHOW CONTINUOUS QUERIES
SHOW CONTINUOUS QUERIES语法用于显示当前数据库中的所有已存在的连续查询。如需查看其他数据库中的连续查询对象,可以通过USE语句切换至目标数据库。
语法
show_cq_statement ::= SHOW CONTINUOUS QUERIES返回结果集说明
列名 | 类型 | 结果说明 |
name | VARCHAR | 连续查询的名称。 |
interval | VARCHAR | 该连续查询的计算窗口间隔。 |
window | VARCHAR | 用于指定连续查询的计算窗口,即每次计算所覆盖的数据的时间范围。 |
offset | VARCHAR | 指定窗口偏移。 |
query | VARCHAR | 连续查询中具体的查询计算的语句。 |
示例
展示当前数据库下的连续查询语句。
SHOW CONTINUOUS QUERIES;返回结果如下:
+-------+----------+--------------------------------+
| name | interval | query |
+-------+----------+--------------------------------+
| my_cq | 1d | INSERT INTO |
| | | `db_sensor_year`.`sensor` |
| | | (SELECT MEAN(`temperature`) |
| | | AS `temperature`, |
| | | MEAN(`humidity`) AS |
| | | `humidity`, `device_id`, |
| | | `region` FROM |
| | | `db_sensor_month`.`sensor`) |
+-------+----------+--------------------------------+DROP CONTINUOUS QUERY
DROP CONTINUOUS QUERY语法可删除连续查询的SQL。
语法
drop_cq_statement ::= DROP CONTINUOUS QUERY [database_identifier.cq_identifier]使用说明
数据库名(database_identifier)
连续查询对象所属数据库的名称,不指定时默认是当前数据库。使用时必须在数据库名前后添加反引号(`),例如 `db_sensor`。
连续查询名称(cq_identifier)
您可以通过SHOW CONTINUOUS QUERIES语法获取当前数据库下所有连续查询的名称,确认是否需要删除。
使用时必须在连续查询名称前后添加反引号(`),例如 `my_cq`。
示例
删除数据库db_sensor下名为my_cq的连续查询。
DROP CONTINUOUS QUERY `db_sensor`.`my_cq`;