Skip to main content
对与指定过滤表达式匹配的数据进行操作。其作为一种变更实现。
ALTER TABLE 前缀使这种语法有别于大多数其他支持 SQL 的系统。这样设计是为了表明,与 OLTP 数据库中的类似查询不同,这是一项开销较大的操作,并非为频繁使用而设计。
filter_expr 必须为 UInt8 类型。对于 filter_expr 取非零值的行,此查询会将指定列的值更新为相应表达式的值。这些值会使用 CAST 运算符转换为列类型。不支持更新用于计算主键或分区键的列。 一条查询可以包含多个以逗号分隔的命令。 IN PARTITION 子句将变更限定在所列出的分区上。若不使用该子句,在 ReplicatedMergeTree 家族的表上,当启用 optimize_mutations_with_partition_pruning 设置时 (默认启用) ,ClickHouse 会自动检测 filter_expr 中的分区键条件,并仅对受影响的分区执行变更。在非复制表的 MergeTree 表上,请使用显式的 IN PARTITION 子句将变更限定到特定分区。 查询处理的同步方式由 mutations_sync 设置决定。默认情况下,它是异步的。 另请参阅

materialized 列

表达式引用已更新列的 MATERIALIZED 列会在变更期间重新计算,因此其存储值将与新数据保持一致。

基于 EPHEMERAL 列计算的列

EPHEMERAL 列仅在执行 INSERT 期间存在,且不会被存储。因此,基于该列计算的 MATERIALIZED 列无法通过变更重新计算。这类列会保留 INSERT 时计算出的值,之后该值将不再与其表达式匹配:
m 为 8,即在 INSERT 时计算得出的值,而非 2 + 7:e 的值在提供该值的 INSERT 之外不可用。因此,变更跳过某列时会在服务器日志中写入一条警告。要更新此类列,请重新 INSERT 受影响的行。

相关内容

最后修改于 2026年9月26日