【发布时间】:2019-01-17 03:38:54
【问题描述】:
我看到 clickhouse 为每个分区键(在每个节点中)创建了多个目录。 文档说目录名称格式是:分区ID_最小块号_最大块号_级别。 知道这里是什么水平吗? 一个节点(一张表)上的 347 个不同的分区键创建了 1358 个目录。 (自定义分区)
文档建议不要超过 1000 个分区。我们应该只记住分区键的数量还是目录的数量?
另外,有没有关于如何控制这个目录数量的配置?
【问题讨论】:
标签: clickhouse
我看到 clickhouse 为每个分区键(在每个节点中)创建了多个目录。 文档说目录名称格式是:分区ID_最小块号_最大块号_级别。 知道这里是什么水平吗? 一个节点(一张表)上的 347 个不同的分区键创建了 1358 个目录。 (自定义分区)
文档建议不要超过 1000 个分区。我们应该只记住分区键的数量还是目录的数量?
另外,有没有关于如何控制这个目录数量的配置?
【问题讨论】:
标签: clickhouse
知道这里的水平是什么吗?
级别是LSM-tree 的概念。 MergeTree 表具有将数据部分合并为更大更深(w.r.t 级别)的机制。
我们应该只记住分区键的数量还是目录的数量?
我认为这不是一个好主意,因为这种方法不能很好地扩展。您最好选择低基数列或表达式作为分区键。
另外,有没有关于如何控制这个目录数量的配置?
没有明确的设置。但是您可以轻松地使用模块化表达式来限制分区的总数。
【讨论】:
除了这个讨论,您可以通过以下方式检查零件和分区:
对于活动分区:
select count(distinct partition) from system.parts where the table in ('table_name') and active
对于活动部件:
select count() from system.parts where table in ('table_name') and active
不活动的部分将在不到 10 分钟的时间内被移除。
此外,您还可以阅读here 的更多信息,了解部件、分区以及如何进行合并。
查看表部分和分区:
SELECT
partition,
name,
active
FROM system.parts
WHERE table = 'table_name'
【讨论】: