clickhouse21.7.11.3 表引擎-MergeTree-分区存储文件说明

说明

指定 分区字段后,查询时,避免全表扫描,极大的提升查询效率

存储原理

在写入数据时,按照 分区键 将数据分成 不同的文件夹,文件夹内每列数据为不同的独立文件,以及创建数据的序列化索引排序记录文件。

查看

进入 default 数据库,存储数据的根目录:

cd /program/clickhouse/data/data/default/
ls

可以看到 t_student_mt 文件,该文件是 软链接,执行下面命令:

cd t_student_mt

执行结果,进入到下面目录:

/program/clickhouse/data/store/427/427416be-ca6e-40b0-8274-16beca6e00b0/
ll

执行结果如下:

20220101_2_2_0
20220102_1_1_0

以 分区字段 值 命名的文件夹,里面就是各个分区的数据

cd 20220101_2_2_0
ls

看到以下文件:

checksums.txt  -- 校验文件
columns.txt  -- 列信息
count.txt    -- 总共行数。查询总行数会很快
data.bin     -- 数据
data.mrk3    -- 标记文件
default_compression_codec.txt    -- 压缩格式
minmax_create_time.idx           -- 分区字段的最小、最大值
partition.dat  -- 分区信息
primary.idx    -- 主键信息,提升查询速度

count.txt 文件说明

该文件的内容,就是所在分区的总共行数,执行下面语句:

select count() from t_student_mt

就是读取该文件,所以查询总行数的速度很快

分区目录的命名规则

如下:

20220101_2_2_0

分以下部分:

  • 20220101:分区 ID,由 PARTITION BY 字段决定。生成的方式有:
    • 如果未指定,就是 all
    • 整型:字段中的值
    • 日期类型:字段中的值
    • String:根据字段的值,生成的hash值
    • Float:根据字段的值,生成的hash值
  • 2:最小分区块编号,从1开始,每生成一个分区,数字加1
  • 2:最大分区块编号,默认等同于最小分区编号。合并后,就不同了
  • 0:合并的次数

原文出处:/show_1IX3OsUmLiB5.html