
# ClickHouse TTL表变更
#### 场景1：TTL周期由小变大方案：
方案一：新建一张TTL时间为最新时间的表结构相同但名不同的表，把原表的数据导入新表，交换表名字；
方案二：业务代码中异步下发ClickHouse的修改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;** --多个分区逐一删除。
 
