四个交互演示:① 分区裁剪可视化 · ② TTL 数据搬迁动画 · ③ 列 / 表 / GroupBy TTL 对比 · ④ 分区粒度选择器
下面是 12 个月分区的 events_log,每个分区约 1 亿行。试试不同 WHERE 条件,看 ClickHouse 跳过哪些分区。
toString(event_date) =",你会看到 所有分区都被扫描 —— 因为函数包了一层,CK 没法把字符串反推回 toYYYYMM 范围。WHERE 写表达式时,永远让分区键在 = / >= / BETWEEN 的左边。
表配置如下:
CREATE TABLE events_log (...)
TTL event_date + INTERVAL 30 DAY TO DISK 'cold',
event_date + INTERVAL 60 DAY RECOMPRESS CODEC(ZSTD(17)),
event_date + INTERVAL 90 DAY TO VOLUME 's3_volume',
event_date + INTERVAL 365 DAY DELETE
SETTINGS storage_policy = 'hot_to_cold_to_s3';
OPTIMIZE TABLE ... FINAL 或 MATERIALIZE TTL。
TTL event_date + INTERVAL 7 DAY DELETE
7 天后整行消失。
| date | uid | payload |
|---|
debug_log TTL event_date + INTERVAL 7 DAY
7 天后该列变空,行还在,其他列保留。
| date | uid | payload | debug_log |
|---|
TTL event_date + INTERVAL 30 DAY GROUP BY event_date, user_id SET cnt = sum(cnt)
30 天后明细按 (date,uid) 合并成一行。
| date | uid | cnt |
|---|
假设业务:每天 1 亿行,保留 90 天,单批 INSERT 10 万行 / 5 秒。
parts_to_throw_insert)。"