说明
写入一个批次的数据,会产生一个 临时分区
案例
执行插入
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 实现,详见 链接