CoalescingMergeTree 表引擎
Available from version 25.6
此表引擎从 25.6 及更高版本开始在 OSS 和 Cloud 中可用。
该引擎继承自 MergeTree。关键区别在于数据部分的合并方式:对于 CoalescingMergeTree 表,ClickHouse 会将所有具有相同主键(更准确地说,相同的排序键)的行合并为一行,该行在每一列上都包含最新的非 NULL 值。
这实现了列级别的 upsert(插入或更新),也就是说,您可以只更新特定列,而不是整行。
CoalescingMergeTree 旨在与非键列中的 Nullable 类型配合使用。如果这些列不是 Nullable,其行为与 ReplacingMergeTree 相同。
创建表
有关请求参数的说明,请参阅请求描述。
CoalescingMergeTree 的参数
列
columns - 一个包含需要合并其值的列名的元组(tuple)。可选参数。
这些列必须是数值类型,并且不能出现在分区键或排序键中。
如果未指定 columns,ClickHouse 会合并所有不在排序键中的列的值。
查询子句
在创建 CoalescingMergeTree 表时,所需的子句与创建 MergeTree 表时相同。
已弃用的建表方法
注意
不要在新项目中使用此方法,并尽可能将旧项目切换到上面描述的方法。
除 columns 之外的所有参数与 MergeTree 中的含义相同。
columns— 一个包含列名的元组(tuple),这些列的值将被求和。可选参数。相关说明见上文。
使用示例
请看下表:
向其中插入数据:
结果将如下:
获取最终正确结果的推荐查询:
在查询中使用 FINAL 修饰符会强制 ClickHouse 在查询阶段应用合并逻辑,确保能够为每一列得到正确、已合并的“最新”值。在从 CoalescingMergeTree 表查询时,这是最安全且最精确的方法。
注意
如果底层数据分片(parts)尚未完全合并,使用 GROUP BY 的方式可能会返回不正确的结果。