跳到主要内容
跳到主要内容

删除变更(Delete Mutations)

删除变更(delete mutations)是指通过删除操作来修改表数据的 ALTER 查询。最典型的例子是 ALTER TABLE DELETE 这类查询。执行此类查询会生成数据 part 的变更后新版本。这意味着,对于变更发生前已写入的所有数据,此类语句都会触发整个数据 part 的重写,从而产生大量写入请求。

参考资料

对于删除操作,你可以使用诸如 ReplacingMergeTreeCollapsingMergeTree 等专用表引擎来替代默认的 MergeTree 表引擎,从而避免产生大量写入请求。

ALTER TABLE ... DELETE 语句

ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE WHERE filter_expr

删除与指定过滤表达式匹配的数据。该操作以变更(mutation)的形式实现。

注意

ALTER TABLE 前缀使此语法不同于大多数支持 SQL 的其他系统。其设计目的是表明,与 OLTP 数据库中的类似查询不同,这是一个开销较大的操作,不适合频繁使用。ALTER TABLE 被视为重量级操作,要求在删除之前对底层数据进行合并。对于 MergeTree 表,建议考虑使用 DELETE FROM 查询,它执行轻量级删除,通常会快得多。

filter_expr 必须是 UInt8 类型。查询会删除表中该表达式取非零值的行。

一个查询可以包含多个用逗号分隔的命令。

查询执行的同步方式由 mutations_sync 设置控制。默认情况下,它是异步的。

另请参阅