是否可以从 ClickHouse 表中删除旧记录?
简短的回答是“是”
简短的回答是“是”。 ClickHouse 具有多种机制,允许通过删除旧数据来释放磁盘空间。每种机制都针对不同的场景。
TTL
ClickHouse 允许在发生某些条件时自动删除值。此条件配置为基于任何列的表达式,通常只是任何时间戳列的静态偏移量。
这种方法的关键优势在于它不需要任何外部系统来触发,一旦配置了 TTL,数据删除就会在后台自动发生。
TTL 也可用于移动数据,不仅可以移动到 /dev/null,还可以在不同的存储系统之间移动,例如从 SSD 移动到 HDD。
有关配置 TTL 的更多详细信息。
DELETE FROM
DELETE FROM 允许在 ClickHouse 中运行标准 DELETE 查询。筛选子句中定位的行被标记为已删除,并从未来的结果集中删除。行的清理是异步发生的。
DELETE FROM 通常从 23.3 及更高版本可用。在旧版本上,它是实验性的,必须使用以下命令启用
SET allow_experimental_lightweight_delete = true;
ALTER DELETE
ALTER DELETE 使用异步批量操作删除行。与 DELETE FROM 不同,在 ALTER DELETE 之后和批量操作完成之前运行的查询将包括目标删除的行。有关更多详细信息,请参阅 ALTER DELETE 文档。
ALTER DELETE
可以发出以灵活地删除旧数据。如果您需要定期执行此操作,则主要的缺点是需要一个外部系统来提交查询。还有一些性能方面的考虑,因为即使只有一个行要删除,mutation 也会重写完整的部分。
这是使您的基于 ClickHouse 的系统符合 GDPR 的最常用方法。
有关mutations 的更多详细信息。
DROP PARTITION
ALTER TABLE ... DROP PARTITION
提供了一种经济高效的方式来删除整个分区。它不是很灵活,需要在表创建时配置正确的分区方案,但仍然涵盖了最常见的用例。与 mutations 一样,需要从外部系统执行以进行定期使用。
有关操作分区的更多详细信息。
TRUNCATE
从表中删除所有数据有点极端,但在某些情况下,这可能正是您所需要的。
有关表截断的更多详细信息。