2023年11月26日发(作者:)

第四章partitionby分区

⼀、作⽤

分区的⽬的是降低扫描范围,优化查询速度。

⼆、数据写⼊与分区合并

任何⼀个批次数据写⼊都会产⽣⼀个临时分区,不会纳⼊任何⼀个已有分区。写⼊后某个时刻(⼤概10-15分钟),CH⾃动执⾏合并操作。等不

及可以⼿⼯执⾏合并。

> optimize table *** final;

> cd default

> ll

PartitionId_MinBlockNum_MaxBlockNum_Level

分区值_最⼩分区块编号_最⼤分区块编号_合并层级

=PartitionId

数据分区ID⽣成规则

数据分区规则由分区ID决定,分区IDPARTITION BY分区键决定。根据分区键字段类型,ID⽣成规则可分为:

未定义分区键

没有定义PARTITION BY,默认⽣成⼀个⽬录名为all的数据分区,所有数据均存放在all⽬录下。

整型分区键

分区键为整型,那么直接⽤该整型值的字符串形式做为分区ID

⽇期类分区键

分区键为⽇期类型,或者可以转化成⽇期类型。

其他类型分区键

StringFloat类型等,通过128位的Hash算法取其Hash值作为分区ID

=MinBlockNum

最⼩分区块编号,⾃增类型,从1开始向上递增。每产⽣⼀个新的⽬录分区就向上递增⼀个数字。

=MaxBlockNum

最⼤分区块编号,新创建的分区MinBlockNum等于MaxBlockNum的编号。

=Level

合并的层级,被合并的次数。合并次数越多,层级值越⼤。

> cd 20200601_1_1_0/

> ll

:数据⽂件

3:标记⽂件,数据和索引之间的标记,存储数据的偏移量

default_compression_:默认压缩格式

:分区⾏数,这是表⾏数统计快的原因

:列名、类型记录⽂件

:校验信息,看不懂的东西

:主键索引⽂件,稀疏索引,

:分区索引⽂件

minmax_create_:分区内部索引⽂件,最⼩值与最⼤值

bin⽂件:数据⽂件

mrk⽂件:标记⽂件

标记⽂件在 idx索引⽂件 bin数据⽂件 之间起到了桥梁作⽤。

mrk2结尾的⽂件,表⽰该表启⽤了⾃适应索引间隔。

⽂件:主键索引⽂件,⽤于加快查询效率。

minmax_create_:分区键的最⼤最⼩值。

:校验⽂件,⽤于校验各个⽂件的正确性。存放各个⽂件的size以及hash值。

四、分区合并

先查询⼀下当前的数据:

insert into t values

查看数据⽬录:

什么结论呢?20200601_1_1_0与新插⼊的分区20200601_3_3_0合并了⼀个新的2020-6-1_1_3_1,最⼩块+最⼤块+合并层级。形成⼀个新

的数据⽂件。