如何使用SQL为ClickHouse的system.query_log设置TTL?
为ClickHouse的system.query_log通过SQL设置TTL的方法
1. 确认表引擎类型
system.query_log默认基于MergeTree系列引擎(通常是MergeTree或ReplacingMergeTree),仅这类引擎支持TTL。可通过以下SQL确认:
SELECT engine FROM system.tables WHERE database = 'system' AND name = 'query_log';
2. 执行SQL设置TTL
使用ALTER TABLE语句直接修改表的TTL规则,示例如下:
- 保留最近30天的数据,基于
event_time字段(query_log中记录查询事件时间的字段):
ALTER TABLE system.query_log MODIFY TTL event_time + INTERVAL 30 DAY;
- 若希望按分区自动删除过期数据(更高效),可添加
DELETE PARTITION子句:
ALTER TABLE system.query_log MODIFY TTL event_time + INTERVAL 30 DAY DELETE PARTITION;
注意事项
- 操作前确保当前用户拥有
ALTER权限,修改系统表需较高权限 - 选择的时间字段必须是表中存在的时间类型字段,除
event_time外,也可使用start_time - 若之前已通过配置文件或SQL设置过TTL,执行此语句会覆盖原有规则
- SQL设置的表级TTL优先级高于配置文件中的全局TTL参数
内容的提问来源于stack exchange,提问作者Red Bottle
相关产品推荐
相关产品推荐

