更新时间:2025-07-01 GMT+08:00
分享

ClickHouse TTL表变更

场景1:TTL周期由小变大方案:

方案一:新建一张TTL时间为最新时间的表结构相同但名不同的表,把原表的数据导入新表,交换表名字;

方案二:业务代码中异步下发CK的修改TTL语句,下发之后业务代码不需要等待执行结果:

  1. 类似在shell中,nohup sh xx.sh & --xx.sh中为修改TTL语句:alter table default.test_auto modify ttl EventDate + toIntervalMonth(2);
  2. TTL放在代码流程中的最后一步执行,类似DDL表结构变更语句在TTL修改之前执行;

场景2:TTL周期由大变小方案:

方案一:新建一张TTL时间为最新需要修改时间TTL属性的表,表结构相同但名不同的表,把原表的数据导入到新表,交换表名字;

方案二:配置加上延迟物化参数,修改表TTL为最新时间,具体步骤如下:

  1. 在SQL级配置参数并修改TTL:alter table default.test_auto modify ttl EventDate + toIntervalMonth(2) SETTINGS materialize_ttl_after_modify=0;
  2. 删除过期数据,直接删除过期数据分区:alter table default.test_auto drop partition xxx; --多个分区逐一删除。

相关文档