首页 > 解决方案 > clickhouse 一次合并一个分区

问题描述

当我运行优化表****最终时,如何强制ClickHouse一次只合并一个分区(不指定分区201304然后201305并按顺序运行)?

我正在使用 CollapsingMergeTree。它使用大量 RAM 对许多分区进行多次合并并杀死服务/机器。

标签: clickhouse

解决方案


optimize final(表或分区无关紧要)的主要问题是它完全重写/重新合并一个分区,即使分区只有 1 部分,在 99.9999% 的情况下是过度的!!!!它重新合并了最终已经合并的旧数据!!!

之所以需要它,是因为有时需要将通过单个插入插入的行(重复)折叠到具有永久单个部分的分区中。这是非常非常罕见的必需品。

因此,我建议对具有多个部分的分区运行优化最终。你可以使用这样的东西

select concat('optimize table ',database, '.','\`', table, '\` partition ',partition , ' final;')
from system.parts
where active and (engine like '%ReplacingMergeTree' or  engine like '%CollapsingMergeTree')
group by database,table,partition
having   count()>1

PS:如果您使用 GraphiteMergeTree,那就另当别论了,还有更简单的解决方案。


推荐阅读