clickhouse的TTL過期自動刪除方式


什么是TTL?
  TTL的意思是Time To Live表示數據的存活時間。由於數據的價值會根據保存的時間成反比,出於存儲成本的考慮通常只會保留近一年的數據。而在MergeTree (合並樹)引擎中,可以通過設置TTL來輕松管理數據的存活時間,使數據的價值最大化。當然數倉的數據是不會刪除的,不過會部分業務不需要舊數據,比如用戶的畫像數據,用戶畫像是按天按小時更新甚至實時更新,比較舊畫像數據繼續保存着沒價值則需要刪除。

  在ClickHouse 中,TTL可以設置值的生命周期,它既可以為整張表設置,也可以為每個列字段單獨設置。表級別的 TTL 還會指定數據在磁盤和卷上自動轉移的邏輯。TTL 表達式的計算結果必須是 日期(date) 或 日期時間(datetime),如果同時設置了列級別的和表級別的TTL則以先到期的為准。

1.字段級別TTL
當列字段中的值過期時, ClickHouse會將它們替換成數據類型的默認值。如果分區內,某一列的所有值均已過期,ClickHouse會從文件系統中刪除此列。ClickHouse的INTERVAL(數據時間間隔)支持的操作有:second(秒),minute(分鍾),hour(小時),day(日),week(周),month(月),quarter(季度),year(年)。

示例:

-- 創建時指定 TTL
CREATE TABLE example_table
(
d DateTime,
a Int TTL d + INTERVAL 1 day,
b Int TTL d + INTERVAL 1 day,
c String
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(d)
ORDER BY d;
-- 為表中已存在的列字段添加 TTL
ALTER TABLE example_table
MODIFY COLUMN `c` String TTL d + toIntervalDay(1)
-- 修改列字段的 TTL
ALTER TABLE example_table
MODIFY COLUMN
c String TTL d + INTERVAL 1 WEEK;

 



2.表級別TTL
表可以設置一個用於移除過期行的表達式,以及多個用於在磁盤或卷上自動轉移數據片段的表達式。當表中的行過期時,ClickHouse 會刪除所有對應的行。

示例:event_date超過一個月的數據自動刪除

-- 創建時指定 TTL
CREATE TABLE example_table
(
`event_date` Date,
`uid` Int32,
`name` String
)
ENGINE = AggregatingMergeTree()
PARTITION BY event_date
ORDER BY uid
TTL event_date + toIntervalMonth(1)
SETTINGS index_granularity = 128;
-- 修改表的 TTL,event_date超過三個月的數據自動刪除
ALTER TABLE example_table
MODIFY TTL event_date + toIntervalMonth(3);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM