跳转到主内容
跳转到主内容

删除变更(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 设置控制。默认情况下,它是异步的。

另请参阅