TTL(Time To Live)是指数据的生存时间,在 ByteHouse 企业版中 TTL 可以按照删除级别和行为进行分类。
按删除级别分类的 TTL 包括 Partition-level TTL 和 Row-level TTL:
按行为分类的 TTL 包括 Delete TTL 和 Move TTL:
另外,对于修改 TTL 也有一定的使用限制:
Materialize TTL
修改旧parts的TTL信息,旧parts才可按新的TTL生效。Partition-level TTL 和 Row-level TTL都可以实现数据的删除或移动,但其在数据的删除和移动上的行为会有所差别。另外,当用户通过Alter命令修改TTL后,两种TTL的表现也有所差别,具体参考下表。
Partition-level TTL | Row-level TTL | |
---|---|---|
Delete TTL |
|
|
Move TTL |
|
|
修改TTL |
|
|
MergeTree Family 表引擎对于以上 TTL支持情况如下表。
Partition-level TTL | Partition-level TTL | Row-level TTL | Row-level TTL | 备注 | |
---|---|---|---|---|---|
MergeTree | 按 Row-level TTL 生效 | ByteHouse 企业版 2.4.1.970版本及以上 | ✅ | ✅ | MergeTree表的Partition-level TTL(Delete)会按Row-level TTL处理 |
HaMergeTree | ✅ | ByteHouse 企业版 2.4.1.970版本及以上 | ✅ | ✅ | 推荐使用partition-level TTL |
HaUniqueMergeTree | ✅ | ByteHouse 企业版 2.4.1.970版本及以上 | ✅ | ✅ | 推荐使用partition-level TTL |
TTL 常常与配冷热分层移动因子策略一同配置,详情可参考冷热分层存储。
基本示例如下:
-- 建表时增加TTL CREATE TABLE example_table on cluster xxxx ( d Date, a Int ) ENGINE = HaMergeTree(...) PARTITION BY d ORDER BY d TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'S3' SETTINGS index_granularity = 8192, storage_policy = 's3_cold'; -- 修改 TTL 策略 ALTER TABLE table_name on cluster cluster_name MODIFY TTL toDate(create_date) + toIntervalDay(30) TO DISK 's3';
若如此配置,多级 TTL 和移动因子策略会同时生效。即数据满足了 TTL 的移动条件,或者冷热因子的移动条件后,都会发起热数据向冷数据的移动。
以下为Partition-level TTL 和 Row-level TTL 使用示例。
Case 1: PARTITION BY p_date TTL p_date + interval 10 day -- Partition-level TTL TTL toDate(x) + interval 10 day -- Row-level TTL: x 不是partition by的字段 Case 2: PARTITION BY toDate(event_time), toHour(event_time) TTL toDate(event_time) + interval 10 day -- Partition-level TTL, toDate(event_time)是partition by中的一个字段 TTL event_time + interval 10 day -- Row-level TTL, event_time不是partition by中的一个字段 Case 3: PARTITION BY event_time TTL toDate(event_time) + INTERVAL 1 MONTH -- Partition-level TTL, event_time是partition by字段
以下为Delete TTL 和 Move TTL 使用示例。
TTL p_date + interval 10 day -- Delete TTL, p_date超过10天的数据将会被删除 TTL p_date + interval 10 day TO Disk 'disk_s3' -- Move TTL, p_date超过10天的数据会移动到disk_s3 TTL event_time + interval 10 hour -- Delete TTL TTL event_time + interval 10 hour TO Volume 'volume_s3' -- Move TTL
需要注意的是,一张表只能指定一个Delete TTL,可以指定多个Move TTL;一张表的TTL可由0~1个Delete TTL 和0~n个Move TTL组成。
TTL p_date + interval 10 day -- Yes, 仅包含1个Delete TTL TTL p_date + interval 10 day, event_time + interval 10 hour -- Error: 最多只能有一个Delete TTL TTL p_date + interval 10 day TO disk 'disk_s3', event_time + interval 10 hour TO Volume 'volume_s3' -- Yes, 包含0个Delete TTL和2个Move TTL TTL p_date + interval 20 day, p_date + interval 10 day TO disk 'disk_s3', event_time + interval 10 hour TO Volume 'volume_s3' -- Yes, 包含1个Delete TTL和2个Move TTL