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

更新变更

更新变更是指通过更新操作来修改表数据的 ALTER 查询。最典型的就是 ALTER TABLE UPDATE 这类查询。执行此类查询会生成数据片段(data parts)的新变更版本。这意味着,对于变更之前已插入的所有数据,这些语句都会触发对整个数据片段的重写,从而产生大量写请求。

参考资料

对于更新操作,可以通过使用 ReplacingMergeTreeCollapsingMergeTree 等专用表引擎来替代默认的 MergeTree 表引擎,从而避免产生大量写请求。

ALTER TABLE ... UPDATE 语句

ALTER TABLE [db.]table [ON CLUSTER cluster] UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_expr

对符合指定过滤表达式的数据进行修改。实现为一种 mutation

:::note
ALTER TABLE 前缀使得此语法不同于大多数支持 SQL 的其他系统。其目的是强调,与 OLTP 数据库中的类似查询不同,这是一种开销较大的操作,并不适合频繁使用。 :::

filter_expr 必须是 UInt8 类型。该查询会将满足 filter_expr 取非零值的行中指定列的值更新为相应表达式的值。这些值会通过 CAST 运算符转换为列的类型。不支持更新用于计算主键或分区键的列。

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

查询处理的同步性由 mutations_sync 设置决定。默认情况下是异步的。

另请参阅