Skip to main content
自 25.6 版本起可用此表引擎在 OSS 和 Cloud 中自 25.6 版本起可用。
此引擎继承自 MergeTree。关键区别在于 parts 的合并方式:对于 CoalescingMergeTree 表,ClickHouse 会将具有相同主键的所有行 (更准确地说,具有相同排序键的所有行) 合并为一行,该行包含每一列最新的非 NULL 值。 这使得列级 upsert 成为可能,也就是说,你可以只更新特定列,而不必更新整行。 CoalescingMergeTree 适用于非键列中的 Nullable 类型。如果这些列不是 Nullable,则其行为与 ReplacingMergeTree 相同。

创建表

有关请求参数的描述,请参见请求描述

CoalescingMergeTree 参数

columns - 可选。一个 Tuple,包含要合并其值的列名。给定的列不能位于分区或排序键中。如果未指定 columns,ClickHouse 会合并所有不在排序键中的列的值。

查询子句

创建 CoalescingMergeTree 表时,需要使用与创建 MergeTree 表相同的子句

使用示例

以下表为例:
向其中插入数据:
结果如下所示:
为获得正确的最终结果,建议使用以下查询:
使用 FINAL 修饰符会强制 ClickHouse 在查询时应用合并逻辑,确保你能为每一列获取正确、合并后的”最新”值。这是在从 CoalescingMergeTree 表中查询时最安全、最准确的方法。
如果底层 parts 尚未完全合并,使用 GROUP BY 的方法可能会返回不正确的结果。

Tuple 元素聚合

启用 allow_tuple_element_aggregation 设置后,Tuple 列会被递归展平,使每个叶子元素都能独立参与合并。这让您可以在单个 Tuple 列中存储多个字段,并在 合并 期间按元素分别合并——每个 Nullable 子列都会独立保留最新的非 NULL 值。 展平后的子列适用与普通列相同的规则:
  • 属于 排序键 或 partition key 中 Tuple 的子列不会参与合并。
  • 如果指定了 columns,则只会合并所列 Tuple 列的子列。
此设置不可更改,必须在创建表时指定。
最后修改于 2026年7月23日