TTL 即 Time To Live, MergeTree 提供了可以管理数据或者列的生命周期的功能,TTL用于设置值的生命周期,它既可以为整张表设置,也可以为每个列字段单独设置。
列级别 TTL
要定义TTL,必须要使用时间间隔操作符,如下所示
TTL date_time + INTERVAL 5 SECONDS
TTL date_time + INTERVAL 15 HOUR
TTL date_time + INTERVAL 1 MONTH
➢ 创建测试表
create table t_order_mt2(
id UInt32,
sku_id String,
total_amount Decimal(16,2) TTL create_time+interval 10 SECOND,
create_time Datetime
) engine =MergeTree
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id, sku_id);
➢ 插入数据(注意:根据实际时间改变)
insert into t_order_mt2 values
(106,'sku_001',1000.00,'2020-06-12 22:52:30'),
(107,'sku_002',2000.00,'2020-06-12 22:52:30'),
(110,'sku_003',600.00,'2020-06-13 12:00:00');
➢ 手动合并, 查看效果 到期后,指定的字段数据归 0
表级 TTL
➢ 创建测试表
CREATE TABLE stu
(
id Int32 ,
name String ,
create_time DateTime
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(create_time)
ORDER BY id TTL create_time + INTERVAL 30 SECOND DELETE ;
表级TTL只不过是把TTL直接定义在了表外,相对于对全局的一个TTL定义,最后的DELETE 可加可不加,默认到期了整行数据都会删除.
insert into stu values
(100,'tom',now()),
(101,'jack',now()),
(102,'mary',now()),
手动触发强制合并可以发现已经过期的数据被整行删除了.
适用场景:
数仓建设需要考虑数据的生命周期问题,数据的生命周期包括数据最初的写入,存储,处理,查询,归档和销毁几个基本的阶段。
实际中数仓数据量的成倍增长对数据存储治理是一个巨大的挑战,clickhouse这样的一个设计,可以有效处理解决数据有效的存储周期和销毁的问题。