MergeTree
MergeTree是clickhouse最强大的引擎。其主要特点: 1:存储的数据按主键排序 2:支持数据分区 3:支持数据副本 4:支持数据采样 5:支持ttl 下面我们来建一个表test_mergetree,表数据只保留一个月下面的就是例子
代码语言:javascript复制create table test.test_mergetree (
id Int32 comment 'id',
name String comment '名称',
age Int32 comment '年龄',
create_at DateTime comment '创建时间'
)engine=MergeTree() order by id partition by toYYYYMM(create_at) primary key id sample by id TTL create_at INTERVAL 1 MONTH DELETE;
建表参照官方文档:
代码语言:javascript复制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()
ORDER BY expr
[PARTITION BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...]
注意点:
ENGINE - 引擎名和参数。 ENGINE = MergeTree(). MergeTree 引擎没有参数。
ORDER BY — 排序键。没有使用 PRIMARY KEY 显式的指定主键,ClickHouse 会使用排序键作为主键。
PARTITION BY — 分区键 。最小支持到天
PRIMARY KEY - 主键,指定一个跟排序键不一样的主键是可以的,此时排序键用于在数据片段中进行排序,主键用于在索引文件中进行标记的写入。这种情况下,主键表达式元组必须是排序键表达式元组的前缀。
SAMPLE BY — 用于抽样的表达式。如果要用抽样表达式,主键中必须包含这个表达式。例如:
SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID)) 。
TTL 指定行存储的持续时间并定义数据片段在硬盘和卷上的移动逻辑的规则列表,可选。可支持列ttl和表ttl。
列ttl样例:TTL time_column interval
MergeTree对应的其家庭树引擎有如下: AggregatingMergeTree ReplacingMergeTree SummingMergeTree
下一讲我们分别讲MergeTree的家庭树引擎,以及数据副本引擎。