本文共 1396 字,大约阅读时间需要 4 分钟。
ClickHouse的核心设计理念围绕MergeTree引擎展开,作为其基础,理解MergeTree的工作原理至关重要。本文将从分区、索引、标记文件、数据块等方面深入探讨MergeTree的实现细节,揭示其高效查询背后的秘密。
MergeTree表的创建语法简洁,主要参数包括:
示例:
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name ( name1 [type] [DEFAULT|MATERIALIZED|ALIAS expr], name2 [type] [DEFAULT|MATERIALIZED|ALIAS expr], ...) ENGINE = MergeTree() [PARTITION BY expr] [ORDER BY expr] [PRIMARY KEY expr] [SAMPLE BY expr] [SETTINGS name=value, ...]
MergeTree采用按列存储和压缩算法:
ORDER BY规则预先排序。分区ID生成规则包括:
all。YYYYMMDD格式。分区名称格式为:
PartitionID_MinBlockNum_MaxBlockNum_Level
其中:
PartitionID:分区ID。MinBlockNum:最小数据块编号。MaxBlockNum:最大数据块编号。Level:合并次数。分区合并基于以下规则:
partition.dat和minmax索引文件。稀疏索引优势体现在:
index_granularity定义索引粒度,影响数据标记和索引文件。每8192行生成一次索引标记。
索引文件primary.idx内容规则:
ORDER BY(CounterID, EventDate)。MergeTree支持四种二级索引:
二级索引语法:
INDEX index_name expr TYPE index_type(...)GRANULARITY granularity
创建时会生成相应的索引和标记文件。
转载地址:http://mqzzz.baihongyu.com/