数据保留策略
数据保留策略(Retention Policy)用于管理时序数据的生命周期。时序表使用的数据保留策略决定了时序表中数据的保留时长,超过保留时长的数据会被自动删除。
数据保留策略归属于某个 database,同一个 database 下可以创建多个保留策略,并指定其中一个为默认策略。用户创建时序表时,如果没有显式指定数据保留策略,则会使用该 database 下的默认数据保留策略。
创建数据保留策略
用于在当前 database 下创建一个新的数据保留策略。
数据保留策略包含两个参数:
-
duration: 数据保留时间,必选参数。例如设置为 1week,则一周以前的数据会被自动删除。
-
chunkGroupDuration: 数据分区粒度,可选参数。时序表中的数据会按照时序表设置的chunkGroupDuration进行分区;对于超出保留时长的数据,也会按照 ChunkGroupDuration 粒度进行删除。如未指定该参数,系统会按照 duration自动指定chunkGroupDuration。
语法描述
CREATE TIMESERIES POLICY [ IF NOT EXISTS ] policy_name WITH (option = value, [...] )
其中option包含:
-
duration:时序数据保留时间,超出这个时间的历史数据自动删除,删除以Chunk Group粒度为单位。取值范围 >= 1h。特殊值0表示数据永久保留,此时时间单位支持second、minute、hour、day、week、month、year。
-
chunkGroupDuration:指定时序表的Chunk Group时间跨度,不支持设为特殊值0。
如果未指定本参数,系统自动根据duration参数设置合适的Chunk Group Duration参数,规则如下
- duration < 2天,chunkGroupDuration设置为1小时。chunkGroup 时间对齐到一小时,即chunkGroup的起止时间应该是整点,如 '2020-07-10 00:00:00'、'2020-07-10 01:00:00',而不会出现 '2020-07-10 00:10:00'、'2020-07-10 00:10:10' 这样的时间点。
- duration <= 6个月,chunkGroupDuration设置为1天。chunkGroup对齐到天,如 '2020-07-10 00:00:00'、'2020-07-11 00:00:00';
- duration > 6个月,chunkGroupDuration设置为7天。chunkGroup对齐到周,即chunkGroup的起始时间对齐到当周的周一。
- duration > 3 年,chunkGroupDuration设置为 1个月。chunkGroup对齐到月,即chunkGroup的起始时间对齐到当月的一号。
duration和chunkGroupDuration数字部分的上限为231。
每个 database 下有一个名为 ‘infinity’的默认的数据保留策略,默认策略的 duration=’0s’,表示数据永远不删除,chunkGroupDuration=’1month’。
约束
-
新建的数据保留策略名称不能与已存在的保留策略重名。
-
duration不能小于chunkGroupDuration。
-
duration和chunkGroupDuration格式为'数字+时间单位'。输入的数字如果不是整数,系统会对其向上取整,例如1.2 week会取整为2 weeks。
-
duration和chunkGroupDuration不支持负数,duration和chunkGroupDuration支持的最小时间单位是1 hour,如果设置的值小于1 hour 会自动设置为 1 hour。
-
duration和chunkGroupDuration支持设置的单位包括:小时(hour)、天(day)、周(week)、月(month)、年(year),不支持其他时间单位。
-
每种时间单位的取值范围限制如下:
单位 下限 上限 年 0 296533 月 0 3558399 周 0 15250284 天 0 106751991 小时 0 2147483647
示例
Uqbar=# CREATE TIMESERIES POLICY policy_test WITH (duration = '2 years', chunkGroupDuration='7 days');
CREATE POLICY
修改数据保留策略
用于修改已存在的数据保留策略。
语法描述
ALTER TIMESERIES POLICY [IF EXISTS] policy_name actions
其中action包含:
-
RENAME TO policy_name,用于修改数据保留策略名,其中 policy_name 用于指定修改后的策略名
-
SET (option = value, [...]) ,用于修改数据保留策略的参数
其中option包含:
- { duration, chunkGroupDuration }
约束
- 修改后的 duration 和 chunkGroupDuration 需满足新建数据保留策略的约束
示例
Uqbar=# ALTER TIMESERIES POLICY policy_test SET( chunkGroupDuration='1 month');
ALTER POLICY
Uqbar=# ALTER TIMESERIES POLICY policy_test RENAME TO policy_1;
ALTER POLICY
删除数据保留策略
用于删除已存在的数据保留策略。
语法描述
DROP TIMESERIES POLICY [IF EXISTS] policy_name
可以用于删除一个或多个timeseries policy。
如果没有IF EXISTS选项,且被删除的策略列表中中有不存在的策略,则执行报错,给出对应的错误提示,不执行任何策略的删除。
如果含有IF EXISTS选项,且被删除的策略列表中有不存在的策略,则执行跳过不存在的策略,并给出对应的提示信息,存在的策略执行删除操作。
约束
-
如果数据保留策略正在被时序表使用,无法删除。
-
数据库下的默认策略不能被删除。
示例
Uqbar=# DROP TIMESERIES POLICY policy1;
DROP POLICY
设置默认策略
用于修改当前 database 下的默认数据保留策略。
语法描述
ALTER TIMESERIES POLICY policy_name DEFAULT;
示例
Uqbar=# ALTER TIMESERIES POLICY policy1 DEFAULT;
ALTER TIMESERIES POLICY
查询数据保留策略
通过 timeseries_views.policies 视图展示当前已存在的数据保留策略。视图属性参见timeseries_views.policies。
语法描述
SELECT * FROM timeseries_views.policies;
示例
Uqbar=# SELECT * FROM timeseries_views.policies;
policyname | duration | chunkgroupduration | default
------------+----------+--------------------+---------
infinity | 00:00:00 | 1 mon | t
(2 rows)