clickhouse21.7.11.3 表引擎-MergeTree-临时分区、分区文件、查询表分区信息、分区合并时机

说明

写入一个批次的数据,会产生一个 临时分区

案例

执行插入

clickhouse-client -m
insert into t_student_mt values 
(5,'武大郎',25,178,'2022-01-01 10:30:00'),
(6,'武二郎',23,181,'2022-01-02 11:50:00'),
(6,'武四郎',22,183,'2022-01-03 12:50:00');

执行查询

在 clickhouse-client 中执行查询:

select * from t_student_mt ;

执行结果如下:

┌─sid─┬─name───┬─age─┬─heigth─┬─────────create_time─┐
│   2 │ 韩梅梅 │  19 │    165 │ 2022-01-01 09:30:00 │
│   2 │ 李雷   │  20 │    182 │ 2022-01-01 09:30:00 │
└─────┴────────┴─────┴────────┴─────────────────────┘
┌─sid─┬─name───┬─age─┬─heigth─┬─────────create_time─┐
│   5 │ 武大郎 │  25 │    178 │ 2022-01-01 10:30:00 │
└─────┴────────┴─────┴────────┴─────────────────────┘
┌─sid─┬─name─┬─age─┬─heigth─┬─────────create_time─┐
│   1 │ lucy │  22 │    170 │ 2022-01-02 09:30:00 │
│   4 │ 张三 │  21 │    171 │ 2022-01-02 09:50:00 │
│   4 │ lili │  22 │    171 │ 2022-01-02 09:50:00 │
└─────┴──────┴─────┴────────┴─────────────────────┘
┌─sid─┬─name───┬─age─┬─heigth─┬─────────create_time─┐
│   6 │ 武二郎 │  23 │    181 │ 2022-01-02 11:50:00 │
└─────┴────────┴─────┴────────┴─────────────────────┘
┌─sid─┬─name───┬─age─┬─heigth─┬─────────create_time─┐
│   6 │ 武四郎 │  22 │    183 │ 2022-01-03 12:50:00 │
└─────┴────────┴─────┴────────┴─────────────────────┘

可以看到新添加的 3 条数据,分2个分区,并没有合并到之前的分区中,这2个分区就是 新生成的 临时分区

查看文件

ll /program/clickhouse/data/data/default/t_student_mt/

显示如下:

20220101_2_2_0
20220101_3_3_0
20220102_1_1_0
20220102_4_4_0
20220103_5_5_0

其中下面目录是新生成的:

20220101_3_3_0
20220102_4_4_0
20220103_5_5_0

查询表分区信息

SELECT
    partition,
    name,
    part_type,
    active
FROM system.parts
WHERE table = 't_student_mt'

执行结果:

partition name part_type active
20220101 20220101_2_2_0 Compact 1
20220101 20220101_3_3_0 Compact 1
20220102 20220102_1_1_0 Compact 1
20220102 20220102_4_4_0 Compact 1
20220103 20220103_5_5_0 Compact 1

解释:

  • partition 列存储分区的ID
  • name 列为分区目录的名称。
  • part_type 数据存储格式
    • Wide: 每一列都单独存储一个数据文件
    • Compact: 所有列都存储一个数据文件
  • active 列为片段状态。
    • 1: 代表激活状态;
    • 0: 代表非激活状态。非激活片段是那些在合并到较大片段之后剩余的源数据片段。损坏的数据片段也表示为非活动状态。

Merge合并时机

写入后大约 10-15分钟后,会自动执行合并操作,将 临时分区 合并到已有分区中

注意:如果某个分区 一直不写入新的数据,可能该分区一直不merge。一般写入 5次左右 数据,就会触发 merge

例子

上面的插入语句,执行 5次左右,就会触发Merge合并

手动 Merge合并

如果需要立即merge,可通过 手动 merge 实现,详见 链接


原文出处:/show_1IX3OwWolIc5.html