连续查询

更新时间:
复制 MD 格式

连续查询(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

用于指定持续查询的计算间隔,即计算任务的执行间隔。最小单位为秒。

格式为%d%h%m%s。例如,1h30s表示1小时30秒;1d表示一天。

其中:

  • d: 天

  • h: 小时

  • m:分

  • s: 秒

window

STRING

用于指定持续查询的计算窗口,即每次计算所覆盖的数据的时间范围。若不指定,则计算窗口与执行间隔(interval)相同。例如,`interval`='10m', `window`='20m'表示计算任务每隔10分钟执行一次,每次执行都基于最近20分钟内的数据进行计算。

计算窗口为左闭右开的时间区间。

格式为%d%h%m%s。例如,1h30s表示1小时30秒;1d表示一天。

其中:

  • d: 天

  • h: 小时

  • m:分

  • s: 秒

offset

STRING

指定窗口偏移。默认窗口是按照1970-01-01 00:00:00 UTC对齐划分,通过offset参数可以指定窗口对齐的偏移。例如,`interval`='1d', `offset`='16h'表示计算任务在北京时间每天的零点执行。

格式为%d%h%m%s。例如,1h30s表示1小时30秒; 1d表示一天。

其中:

  • d: 天

  • h: 小时

  • m:分

  • s: 秒

数据写入语句(insert_select_statement

  • insert_select_statement的语法说明,请参见数据写入

  • 指定insert_select_statement时可以不用指定查询的时间范围,引擎会自动在当前时间窗口内进行计算。

  • SELECT子句的列数需要和目标表一致,包含FieldTag。

示例

以下示例创建了一个持续查询:每小时计算过去两个小时内原始时序表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`;