文档中心MogDBMogDB StackUqbar

文档:v2.0

支持的版本:

其他版本:

CREATE CONTINUOUS AGGREGATION

功能描述

在当前数据库中创建一个新的持续聚合。

语法格式

CREATE CONTINUOUS AGGREGATION [ IF
NOT EXISTS ] conagg_name [ TABLESPACE tablespace_name ]
EVERY resample_interval
[ START_OFFSET end_offset]
[ END_OFFSET start_offset ]
AS <select_query>;

其中select_query为:

SELECT time_bucket(<const_value>,<time_col>) as
bucket,[grouping_exprs],<aggregation_functions> FROM
source_timeseries_table
[WHERE ...]
GROUP BY bucket,[grouping_exprs],[optional_grouping_exprs]
[HAVING ...]

参数说明

  • conagg_name

    持续聚合名,可包含schema_name,不包含schema_name时以默认schema作为schema_name,将以此持续聚合名作为持续聚合目标表的表名,若该表不存在则会自动创建目标表。

    img说明:目标表也是时序表,该时序表使用默认policy。可在创建持续聚合后使用更新时序表保留策略语法替换policy。

    img注意:存在与持续聚合名相同的表将导致创建失败。

  • tablespace_name

    指定持续聚合所属表空间,可选参数。持续聚合目标表也使用此表空间。

  • resample_interval

    持续聚合自动重采样的时间间隔。

    img注意:最小值为1s,最大为INTERVAL类型的最大值。若设置为0则持续聚合的下次启动时间为infinity(timestamp类型的最大值),表示不会启动。

  • start_offset

    聚合数据窗口开始时间距离采样时间的偏移,即resample_time(持续聚合重采样时间)-start_offset并按照time_bucket的宽度向前对齐(对齐时间基准点为2001-01-01 00:00:00)作为采样窗口开始时间。默认值resample_interval。

    img注意:start_offset仅作用于持续聚合创建后的第一次运行,第一次运行后,以上次聚合窗口结束时间作为下一次聚合窗口开始时间。

  • end_offset

    聚合数据窗口结束时间距离采样时间的偏移,即resample_time - end_offset并按照time_bucket宽度向前对齐作为采样窗口结束时间,默认0s。

    img说明: resample_interval,start_offset,end_offset只能使用'数字 时间单位'的格式。若数字部分不是整数则会自动进行向上取整,例如1.5day会取整为2day,-1.1day会取整为-1day(resample_interval不支持负值)。支持的时间单位包括:second,minute,hour,day,week,month,year。

    img注意:约束条件start_offset-end_offset>=resample_interval,保证两次聚合中间没有数据遗漏。start_offset-end_offset>=bucket_width,隐含约束bucket_width不能等于0,因此start_offset和end_offset不能相等。start_offset-end_offset>0,保证采样窗口开始时间小于采样窗口结束时间。start_offset和end_offset可以为负值,表示聚合未来数据。

  • selecrt_query

    持续聚合要执行的聚合查询语句。其包含的参数说明如下。

    • time_bucket

      select_query必须包含且只能包含一个time_bucket函数,time_bucket的相关使用方式请参考time_bucket章节。

    • grouping_exprs

      GROUY BY字句中除time_bucket函数生成列外,在targetlist中出现的列,可为空。当为空时持续聚合目标表中将出现一列默认值为空的extra_tag列。

    • option_grouping_expes

      仅出现在GROUP BY子句但未出现在targetlist中的列,可为空。

      img注意:在GROUP BY中除了time_bucket之外只支持TAG列,或者由包含未出现在GROUP BY子句中的tag的表达式产生的目标列。

    • source_timeseries_table

      持续聚合源表,必须是单个时序表,不能是SELECT语句。

    • aggregation_functions

      聚合函数,例如avg,min,max等。

示例

Uqbar=# CREATE TIMESERIES TABLE weather(time timestamp tstime,city text
tstag,temperature float);
CREATE TIMESERIES TABLE
Uqbar=# CREATE CONTINUOUS aggregation IF NOT EXISTS weather_ca 
EVERY '1 hour'
START_OFFSET '2 day'
END_OFFSET '1 day'
AS 
SELECT time_bucket('1 hour', time) as bucket, province, city,
avg(temperature)
FROM weather
GROUP BY bucket, province, city ORDER BY bucket;
CREATE CONTINUOUS AGGRETATION

建议

  • 持续聚合不适用于数据写入一段时间后仍然进行变更的场景。

  • 当前版本持续聚合写入目标表的数据无法更改,若已聚合范围内的数据发生变化且确需刷新持续聚合,则可创建新的持续聚合,并设置start_offset使持续聚合后台任务初次运行时聚合范围覆盖发生变化数据的时间范围。

  • 持续聚合的目标表仍为时序表,可对其再创建持续聚合。

  • 当time_bucket的bucket_width会自动向上取整,尽量避免'1.5 day'这样的写法,而替换为'36 hour'。

  • 估算某个时间范围内数据从开始写入到写入/修改结束的时间并以此值作为参考设置end_offset,可尽量避免持续聚合写入后出现聚合结果与新的数据不匹配。

  • 由于目标表也是时序表,分区压缩后将导致持续聚合后台任务无法向目标表写入包含压缩分区范围的数据。可在创建持续聚合前以重采样间隔的值为参考更新uqbar.timeseries_compression_delay参数,使目标表上的自动压缩后台任务启动间隔大于持续聚合后台任务启动间隔,避免此问题。

相关页面

ALTER CONTINUOUS AGGREGATIONDROP CONTINUOUS AGGREGATION

Copyright © 2011-2024 www.enmotech.com All rights reserved.