CollasingMergeTree表引擎-记录不会合并,即使它们具有相同的列值和不同的符号(+1/-1)

svmlkihl  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(242)

我们有一个 ClickHouse 带的表格 CollapsingMergeTree 引擎。我们希望在从源导入数据时更新记录(可能很频繁)。最初,所有记录都以+1符号列插入。我们要做的是更新一个记录,我们插入一个要更新的记录,用-1符号表示相同的值,然后插入一个更新的记录,用+1符号表示相同的带相反符号的记录将被折叠 ClickHouse 在后台合并数据部分时。
问题是“这永远不会发生”
我知道一个事实 ClickHouse 将以异步方式合并数据,但数据已过期数月,并且没有执行任何合并 ClickHouse .
我问 SELECT * FROM system.merges 以了解是否有任何合并正在进行。查询结果为0。同时更新 ClickHouse 最新版本。但是运气不好!
如果有人能指出问题所在,会通知你的帮助吗?我是否缺少任何服务器级设置?什么时候 ClickHouse 合并这些记录?
或者我应该采取的其他方法来更新 ClickHouse 数据?

kg7wmglp

kg7wmglp1#

最终——可能永远不会。您不应该依赖于合并过程。它有自己复杂的平衡零件数的算法。合并并没有最终合并的目标,因为它效率不高。
optimize does/forces unnplaned merge,例如,您将从22个优化最终does/forces unnplaned merges中得到4个部分,用于所有部分,直到分区中只有一个部分final的唯一问题是它甚至将1个部分重写为新的1个部分。因为有时它需要在单个零件上折叠行。所以对于一些表,我们运行optimize table x partition final(by 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://stackoverflow.com/a/60154073/11644308

相关问题