如何了解ClickHouse的部分和分区?

问题描述 投票:0回答:1

[我看到Clickhouse为每个分区键创建了多个目录。

Documentation says目录名称格式为:分区名称数据块的最小数量数据块的最大数量块级别。例如,目录名称是201901_1_11_1

我认为这意味着目录是属于分区201901的一部分,具有从111的块,并且位于级别[[1)上。因此,我们可以拥有另一个目录,例如201901_12_21_1,这意味着该部分属于分区201901,具有从[[12到21的块,并且位于级别[[1]]上。 >。 因此,我认为分区分为不同的部分。我说的对吗?

[我看到Clickhouse为每个分区键创建了多个目录。文档说目录名称格式为:分区名称,最小数据块数,最大数据块数...
clickhouse
1个回答
2
投票

选择不关心分区。

选择不知道分区键。


因为每个部分都有特殊文件minmax_ {PARTITIONING_KEY_COLUMN} .idx这些文件包含此部分中这些列的最小值和最大值。此minmax_值也存储在内存中的(c ++矢量)零件列表中。

create table X (A Int64, B Date, K Int64,C String) Engine=MergeTree partition by (A, toYYYYMM(B)) order by K; insert into X values (1, today(), 1, '1'); cd /var/lib/clickhouse/data/default/X/1-202002_1_1_0/ ls -1 *.idx minmax_A.idx <----- minmax_B.idx <----- primary.idx SET send_logs_level = 'debug'; select * from X where A = 555; (SelectExecutor): MinMax index condition: (column 0 in [555, 555]) (SelectExecutor): Selected 0 parts by date

SelectExecutor检查了内存中的零件列表,发现0个零件,因为minmax_A.idx =(1,1),并且需要进行此选择(555,555)。

CH不存储分区键值。

因此,例如toYYYYMM(today())= 202002,但此202002不会存储在零件或任何地方。 

minmax_B.idx存储(18302,18302)(2020-02-10 == select toInt16(today()))

© www.soinside.com 2019 - 2024. All rights reserved.