如何删除Clickhouse表的老数据

时间:2025-01-24 18:46:14

ClickHouse提供多种方式来删除表的旧数据,从而释放磁盘空间。每种删除数据的机制针对不同的场景。

TTL

ClickHouse 允许在某些情况发生时自动删除值。此条件配置为基于任何列的表达式,通常只是任何时间戳列的静态偏移量。

这种方法的主要优点是它不需要任何外部系统来触发,一旦配置了 TTL,数据删除就会在后台自动发生。

注意:TTL 不仅可以用于将数据移动到 /dev/null,还可以在不同的存储系统之间移动数据,例如从 SSD 到 HDD。

可以参考:TTL配置

ALTER DELETE

ClickHouse 不像OLTP数据库那样实时删除数据。与它们相识的是改变(mutations)。它们以 ALTER … DELETE 或 ALTER … UPDATE 查询的形式发出,以区别于一般数据库的DELETE 或 UPDATE,因为它们是异步批处理操作,而不是立即修改。 ALTER TABLE 前缀之后的其余语法类似。

可以发出 ALTER DELETE 灵活删除旧数据。如果您需要定期执行此操作,主要缺点是需要有一个外部系统来提交查询。还有一些性能方面的考虑,因为即使只有一行要删除,变异也会重写完整的分区。

这是使您的系统基于 ClickHouse GDPR 兼容的最常见方法。

可以查看:alter操作的说明。

DROP PARTITION

ALTER TABLE … DROP PARTITION 提供了一种经济高效的方式来删除整个分区。它不是那么灵活,需要在创建表时配置适当的分区方案,但仍然涵盖了最常见的情况。 Like 突变需要从外部系统执行以供常规使用。

可以查看:分区操作

TRUNCATE

从表中删除所有数据是相当激进的,但在某些情况下,它可能正是您所需要的。

可以查看:表的TRUNCATE

总结

以上几种方式中,TTL和DROP PARTITION是比较常用的方式。另外,还有就是可以借助replace引擎来删除老的数据,这个可以见我之前写的一篇文章。
在使用时,还需要根据具体场景进行选择和权衡。