Clickhouse的数据TTL可以为整张表设置,也可以单独为某个列设置。

注意:TTL表达式的计算结果必须是"日期"或"日期时间"类型的字段

Clickhouse表级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;
文章目录