我是靠谱客的博主 纯真哈密瓜,最近开发中收集的这篇文章主要介绍ClickHouse MergeTree家族引擎,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.1ClickHouse MergeTree家族引擎特点:

1支持数据的更新

2支持数据的排序

3支持快速查询

4 支持建立索引

5支持数据分区

6 可以自动合并,去重,局部聚合

1.2代码解读

1.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()ORDER BY expr[PARTITION BY expr][PRIMARY KEY expr][SAMPLE BY expr][TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...][SETTINGS name=value, ...]

1.2.2参数解读

engine --引擎的名称和参数名

order by --排序健(当主键未被指定时,排序健默认为主键,主键是可重复的)

partation by 分区键,可用命令optimize table tb_name将数据按分区键合并

primary key --主键(可重复)

1.2.3各类引擎特点

1.2.3.1ReplacingMerge Tree

格式:engine=ReplacingMerge Tree(主键)

特点:相同主键在合并的同时只保留版本号最大的数据,同时在用户文件夹中生成合并后的文件

1.2.3.2CollapsingMerge Tree

格式:engine=ReplacingMerge Tree(主键)

 ReplacingMerge TreeCollapsingMerge TreeVersionedCollapsingMerge Tree

SummingMergeTree​​​​​​​

格式
create table tb_rep_merge_tree(
id Int8 ,
name String ,
ctime Date ,
version UInt8
)
engine=ReplacingMergeTree(version)
order by id
partition by name
primary key id;

 

CREATE TABLE tb_cps_merge_tree
(
user_id UInt64,
name String,
age UInt8,
sign Int8
)
ENGINE = CollapsingMergeTree(sign)
ORDER BY user_id;
-- 插入状态行,注意sign一列的值为1
INSERT INTO tb_cps_merge_tree VALUES (1001,'ADA', 18, 1);
-- 插入一行取消行,用于抵消上述状态行。注意sign一列的值为-1,其余值与状态行一致;并且插入一行主键相同的新状态行
INSERT INTO tb_cps_merge_tree VALUES (1001, 'ADA', 18, -1), (1001, 'MADA', 19, 1);

 

CREATE TABLE tb_vscmt
(
uid UInt64,
name String,
age UInt8,
sign Int8,
version UInt8
)
ENGINE = VersionedCollapsingMergeTree(sign, version)
ORDER BY uid;
-- 先插入一行取消行,注意Signz=-1, Version=1
INSERT INTO tb_vscmt VALUES (1001, 'ADA', 18, -1, 1);
-- 后插入一行状态行
INSERT INTO tb_vscmt VALUES (1001, 'ADA', 18, 1, 1),(101, 'DAD', 19, 1, 2);(101, 'DAD', 11, 1, 3); -- 数据版本

 

create table tb_summ_merge_tree(
id Int8 ,
name String ,
ctime Date ,
cost UInt8
)
engine=SummingMergeTree(cost)
order by id
partition by name
primary key id;
insert into tb_summ_merge_tree values (1, 'a','2020-08-05', 20);
insert into tb_summ_merge_tree values (1, 'b','2020-08-05', 30);
insert into tb_summ_merge_tree values (1, 'a','2020-08-05', 20);
insert into tb_summ_merge_tree values (1, 'a','2020-08-05', 30);
insert into tb_summ_merge_tree values (1, 'b','2020-08-05', 10);

 

特点相同主键在合并的同时只保留版本号最大的数据存在乱序问题解决了其他两者的问题合并的时候插入的数据以指定字段累加

 

最后

以上就是纯真哈密瓜为你收集整理的ClickHouse MergeTree家族引擎的全部内容,希望文章能够帮你解决ClickHouse MergeTree家族引擎所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部