跳转到主要内容
简短的回答是“可以”。ClickHouse 提供了多种可通过删除旧数据来释放磁盘空间的机制。每种机制都适用于不同的场景。

生存时间 (TTL)

ClickHouse 允许在满足特定条件时自动删除数据。该条件通过基于任意列的表达式来配置,通常只是针对某个时间戳列设置一个固定偏移量。 这种方法的主要优势在于不需要任何外部系统来触发;一旦配置了 TTL,数据删除就会在后台自动进行。
TTL 不仅可用于将数据移动到 /dev/null,还可用于在不同存储系统之间移动数据,例如从 SSD 移动到 HDD。
有关配置 TTL的更多信息。

DELETE FROM

DELETE FROM 允许在 ClickHouse 中执行标准的 DELETE 查询。过滤条件中命中的行会被标记为已删除,并且不会出现在后续的结果集中。行的清理会异步进行。
DELETE FROM 从 23.3 及以上版本起已正式可用。在较早版本中,它属于 Experimental,必须通过以下方式启用:
SET allow_experimental_lightweight_delete = true;

ALTER DELETE

ALTER DELETE 通过异步批次操作删除行。与 DELETE FROM 不同,在执行 ALTER DELETE 之后、批次操作完成之前运行的查询,仍会包含作为删除目标的行。更多详情请参阅 ALTER DELETE 文档。 ALTER DELETE 可用于灵活删除旧数据。如果需要定期执行此操作,主要缺点是必须借助外部系统来提交该查询。此外还需考虑一定的性能开销,因为变更即使只删除单独一行,也会重写整个 parts。 这是让基于 ClickHouse 的系统符合 GDPR 要求的最常见方法。 有关变更的更多信息。

删除分区

ALTER TABLE ... DROP PARTITION 提供了一种以较低成本删除整个分区的方式。它的灵活性没有那么高,并且要求在创建表时就配置好合适的分区方案,但仍然适用于大多数常见场景。与变更一样,如需经常使用,需要从外部系统执行。 更多详情请参见分区操作

TRUNCATE

清空表中的所有数据算是相当激进的做法,但在某些情况下,这可能正是你需要的。 更多详情,请参见表截断
最后修改于 2026年6月10日