自 25.6 版本起可用此表引擎在 OSS 和 Cloud 中自 25.6 版本起可用。
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列的子列。
此设置不可更改,必须在创建表时指定。