Clickhouse表数据TTL
Clickhouse的数据TTL可以为整张表设置,也可以单独为某个列设置。
注意:TTL表达式的计算结果必须是"日期"或"日期时间"类型的字段
表级TTL
表TTL表达式:
TTL time_column + interval 时间间隔 过期后的动作
创建表时指定TTL
-- 创建本地表
CREATE TABLE default.users on cluster '{cluster}'
(
`username` String comment '用户名',
`password` String comment '密码',
`create_time` DateTime DEFAULT now() comment '创建时间'
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default.users','{replica}') order by (username) TTL create_time + INTERVAL 30 SECOND DELETE;
-- 上面语句表示数据的存活时间是create_time时间+30秒钟,过期后数据删除。时间单位可以是SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR
-- https://clickhouse.com/docs/en/sql-reference/operators/#operators-datetime
-- 创建分布式表
CREATE TABLE users_all on cluster '{cluster}' AS default.users
ENGINE = Distributed('{cluster}',default,users,rand());
-- 数据写本地表
insert into default.users (username, password, create_time) values ('user1', '123456',now()),('user2', '123456',now() + INTERVAL 30 SECOND),('user3', '123456', now() + INTERVAL 1 MINUTE);
注意:
1、clickhouse会在数据merge时会删除掉过期的数据。merge的频率由MergeTree系列表的merge_with_ttl_timeout控制,默认频率是14400秒(4小时),这个值不能设置的太低,如果设置太低会引发大量的merge,这会带来大量的资源消耗
2、需验证是否生成,可以手动数据强制合并触发TTL清理OPTIMIZE TABLE users FINAL;
现在表增加或修改TTL
ALTER TABLE users on cluster '{cluster}' MODIFY TTL create_time + INTERVAL 1 DAY;
文章目录
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。