ClickHouse - CollapsingMergeTree 表引擎 - 记录不会合并,即使它们具有相同的列值和不同的符号(+1/-1)
Posted
技术标签:
【中文标题】ClickHouse - CollapsingMergeTree 表引擎 - 记录不会合并,即使它们具有相同的列值和不同的符号(+1/-1)【英文标题】:ClickHouse - CollapsingMergeTree Table Engine - Records are not merged even if they have same column values and different signs(+1/-1) 【发布时间】:2020-02-27 07:18:14 【问题描述】:我们有一个带有CollapsingMergeTree
引擎的ClickHouse
表。我们希望在从源导入数据时更新记录(可能很频繁)。最初,所有记录都插入 +1 符号列。我们更新记录的方法是使用 -1 符号插入要更新的相同值的记录,然后插入带有 +1 符号的更新记录,期望当数据部分时,具有相反符号的相同记录将被 ClickHouse
折叠在后台合并。
问题是'它永远不会发生'
我知道ClickHouse
将异步合并数据,但已经几个月了,ClickHouse
没有执行合并。
我查询了SELECT * FROM system.merges
以了解是否正在进行任何合并。查询结果为 0。还更新了 ClickHouse
到其最新版本。但没有运气!
如果有人能指出问题所在,不胜感激?我是否缺少任何服务器级别的设置? ClickHouse
何时合并此类记录?
或者我应该采取任何其他方法来更新ClickHouse
数据?
【问题讨论】:
【参考方案1】:最终——可能永远不会。 您不应该依赖合并过程。它有自己复杂的算法来平衡零件的数量。 Merge 没有做最终合并的目标——只做 1 个部分,因为它效率不高。
optimize 确实/强制未计划的合并,例如,您将从 22 中获得 4 个部分 优化最终是否/强制所有部分的非计划合并,直到分区中只有一个部分 final 的唯一问题是它甚至将 1 部分重写为新的 1 部分。因为有时它需要在单个部分上折叠行。 因此,对于某些表,我们会针对具有多个部分的分区运行优化表 x 分区最终(通过 crond)。
select concat('optimize table ',database, '.','\`', table, '\` partition ', ((groupUniqArray(partition)) as partition_count)[1], ' final')
from system.parts
where (database = 'xxx' or database like 'zzzz\_%') and (database,table) in (select database, table from system.replicas where engine='ReplicatedReplacingMergeTree' and is_leader)
and table not like '.inner%'
group by database,table having length(partition_count)>1 and sum(rows) < 5000000
https://***.com/a/60154073/11644308
【讨论】:
感谢丹尼斯的回复。您能否建议任何其他方法来更新 ClickHouse 数据? 替换MergeTree?聚合mergeTreegist.github.com/den-crane/d03524eadbbce0bafa528101afa8f794以上是关于ClickHouse - CollapsingMergeTree 表引擎 - 记录不会合并,即使它们具有相同的列值和不同的符号(+1/-1)的主要内容,如果未能解决你的问题,请参考以下文章
大数据 OLAP ClickHouse 引擎ClickHouse 系统架构和存储引擎实现原理 : 为什么 ClickHouse 这么快? Why is ClickHouse so fast?