2.MergeTree系列引擎概述与存储结构
2.1.建表模板
2.2.建表语句
2.3.MergeTree设置
2.4.建表示例
2.5.数据存储
2.6.数据片段(data part)
2.MergeTree系列引擎概述与存储结构
MergeTree系列引擎是ClickHouse中最强大的表引擎。
数据按照片段被一批批写入表。
数据片段在后台按照一定的规则进行合并。
主要特征:
数据按照主键排序
稀疏索引快速检索数据
数据分片
增加查询性能
数据副本
ReplicatedMergeTree系列的引擎支持数据副本,提升查询性能和容错。
数据采样
设置采样方法,快速分析数据。
2.1.建表模板
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
...
INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
[PARTITION BY expr]
[ORDER BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...]
2.2.建表语句
ENGINE:引擎的名称和参数
PARTITION BY:分区键
ORDER BY:表的排序键
PRIMARY KEY:表的主键
SAMPLE BY:采样表达式
TTL:定义行数据的存储时间,磁盘和卷之间数据片段的自动移动的逻辑
SETTINGS:控制MergeTree行为的额外参数
2.3.MergeTree设置
重要参数:
1.index_granularity:索引粒度,以行数为单位,表示索引标记(mark)之间的最大数据行数。默 认值:8192。
2.index_granularity_bytes:索引粒度,以字节为单位, 表示索引粒度的最大字节大小, 默认值:10Mb。设置该参数为0, 将仅按行数限制索引粒度大小。
3.use_minimalistic_part_header_in_zookeeper : 数据片段(part)头在ZooKeeper中的存储方法。设置为1,紧凑存储数据片段头信息,极大减少ZooKeeper的存储数据量
4.storage_policy : 存储策略。存储策略定义了使用多块设备进行数据存储的逻辑。
更多设置参数:参数列表及其功能参见表system.merge_tree_settings(SELECT * FROM system.merge_tree_settings;)。
MergeTree参数的设置:
1.表级别:在建表时设置。
2.全局:config.xml的merge_tree标签内进行设置。
2.4.建表示例
1.非分区表
CREATE TABLE merge_demo
(
srcip String,
destip String,
date_time DateTime
) ENGINE = MergeTree()
ORDER BY srcip
SETTINGS index_granularity = 8192;
2.分区表
CREATE TABLE merge_partition_demo
(
`srcip` String,
`destip` String,
`date_time` DateTime
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(date_time)
ORDER BY srcip;
2.5.数据存储
进入类似:/var/lib/clickhouse/data/{DBNAME}/{TABLENAME}/201403_1_1_0,可以看到类似如下的文件:
[root@hbase2 TabSeparated_demo]# cd 201403_1_1_0/
[root@hbase2 201403_1_1_0]# ll
总用量 84
-rw-r----- 1 clickhouse clickhouse 648 11月 23 18:54 checksums.txt
-rw-r----- 1 clickhouse clickhouse 158 11月 23 18:54 columns.txt
-rw-r----- 1 clickhouse clickhouse 39 11月 23 18:54 CounterID.bin
-rw-r----- 1 clickhouse clickhouse 48 11月 23 18:54 CounterID.mrk2
-rw-r----- 1 clickhouse clickhouse 2 11月 23 18:54 count.txt
-rw-r----- 1 clickhouse clickhouse 10 11月 23 18:54 default_compression_codec.txt
-rw-r----- 1 clickhouse clickhouse 36 11月 23 18:54 EventDate.bin
-rw-r----- 1 clickhouse clickhouse 48 11月 23 18:54 EventDate.mrk2
-rw-r----- 1 clickhouse clickhouse 36 11月 23 18:54 JavaEnable.bin
-rw-r----- 1 clickhouse clickhouse 48 11月 23 18:54 JavaEnable.mrk2
-rw-r----- 1 clickhouse clickhouse 4 11月 23 18:54 minmax_EventDate.idx
-rw-r----- 1 clickhouse clickhouse 4 11月 23 18:54 partition.dat
-rw-r----- 1 clickhouse clickhouse 20 11月 23 18:54 primary.idx
-rw-r----- 1 clickhouse clickhouse 41 11月 23 18:54 RegionID.bin
-rw-r----- 1 clickhouse clickhouse 48 11月 23 18:54 RegionID.mrk2
-rw-r----- 1 clickhouse clickhouse 151 11月 23 18:54 Title.bin
-rw-r----- 1 clickhouse clickhouse 48 11月 23 18:54 Title.mrk2
-rw-r----- 1 clickhouse clickhouse 52 11月 23 18:54 UserID.bin
-rw-r----- 1 clickhouse clickhouse 48 11月 23 18:54 UserID.mrk2
-rw-r----- 1 clickhouse clickhouse 107 11月 23 18:54 WatchID.bin
-rw-r----- 1 clickhouse clickhouse 48 11月 23 18:54 WatchID.mrk2
[root@hbase2 201403_1_1_0]#
checksums.txt :校验文件的正确性和完整性。
columns.txt :存储列的信息,包括数据类型。
count.txt : 存储分区目录下数据的总行数。
primary.idx : 存储索引数据的文件。稀疏索引,能够加速查询。
bin文件 :存储数据的文件, 以压缩格式存储,默认LZ4。
mrk文件 :存储列的数据标记的文件。
partiton.dat : 存储存储分区表达式生成的值。使用二进制格式存储。该文件只在分区表中存储。
*minmax_文件 : 存储能当前目录下, 分区字段对应的原始字段的最小和最大值。
skp_idx_.idx、skp_idx_.mrk : skip索引标记文件。
2.6.数据片段(data part)
一个表是由按主键排序的数据片段(part)组成。
当向表中插入数据时, 将创建单独的数据片段。
ClickHouse在后台合并数据片段以便更高效的存储。
不会合并来自不同分区的数据片段。