本文主要是介绍clickhouse ttl不生效,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现象:
日志保留31天, 但是发现1年前的数据还有。
表结构:
CREATE TABLEads_xxxx_metrics_1m_local (`static_time` String COMMENT '统计时间',......) ENGINE = ReplacingMergeTree (process_time)
PARTITION BYtoYYYYMMDD (toDate (static_time))
ORDER BY(static_time,xxxreal_time_type) TTL parseDateTimeBestEffort (static_time) + toIntervalDay (31)
定位:
是因为删除数据速度 赶不上插入数据速度,造成历史数据无法被清理。
优化:
TTL 删除数据按照 分区时间删除。
`TTL parseDateTimeBestEffort (static_time) + toIntervalDay (31) 这个改成 toDate (static_time) + toIntervalDay (31)`
加速删除数据的速度。
历史使用通过删除分区的方式删除。
select
*
fromsystem.parts
where
table = 'xxxxx';
通过 partition 字段查找 需要删除的分区。
alter table table_namexxxx DROP PARTITION ‘20231125’;
注意:
- TTL 策略默认不会对存量数据生效
这篇关于clickhouse ttl不生效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!