首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >clickhouse表引擎学习2

clickhouse表引擎学习2

作者头像
公众号-利志分享
发布2022-04-25 09:09:58
发布2022-04-25 09:09:58
59500
代码可运行
举报
文章被收录于专栏:利志分享利志分享
运行总次数:0
代码可运行

合并树家族 AggregatingMergeTree 该引擎继承自 MergeTree,并改变了数据片段的合并逻辑。ClickHouse 会将一个数据片段内所有具有相同主键(准确的说是 排序键)的行替换成一行,这一行会存储一系列聚合函数的状态。 该引擎的功能主要是做增量数据聚合统计,包过物化视图函数聚合。 下面我们看个使用例子:

代码语言:javascript
代码运行次数:0
运行
复制
create table test.test_aggremergetree (

  id Int32 comment 'id',

  name String comment '名称',

  money AggregateFunction(sum, Decimal32(2)) COMMENT '工资',

  create_at DateTime comment '创建时间'

) engine = AggregatingMergeTree()

order by

  id partition by toYYYYMM(create_at) primary key id sample by id TTL create_at + INTERVAL 1 MONTH DELETE;
 

插入数据如下: 注意:需要使用INSERT…SELECT语句进行数据插入

代码语言:javascript
代码运行次数:0
运行
复制
insert into table test_aggremergetree select 1,'测试',sumState(toDecimal32(10333,2)),now();

insert into table test_aggremergetree select 1,'测试',sumState(toDecimal32(10,2)),now();

insert into table test_aggremergetree select 1,'测试',sumState(toDecimal32(10,2)),now();

查询数据结果如下:

select id,name,sumMerge(money) from test_aggremergetree group by id,name;
 

AggregatingMergeTree这个其主要功能其实是做物化视图,数据量太多了 可能针对于好几个条件聚合取sum的功能。

ReplacingMergeTree 该引擎和 MergeTree 的不同之处在于它会删除排序键值相同的重复项。数据的去重只会在数据合并期间进行。合并会在后台一个不确定的时间进行,因此你无法预先作出计划。有一些数据可能仍未被处理。尽管你可以调用 OPTIMIZE 语句发起计划外的合并,但请不要依靠它,因为 OPTIMIZE 语句会引发对数据的大量读写。 一般这个引擎的使用都需要设置一个时间,为了避免数据没有及时清理,需要取数据的时候按照排序键取最近的时间的那条数据。

SummingMergeTree 该引擎继承自 MergeTree。区别在于,当合并 SummingMergeTree 表的数据片段时,ClickHouse 会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值。如果主键的组合方式使得单个键值对应于大量的行,则可以显著的减少存储空间并加快数据查询的速度。 这个引擎和听起来和AggregatingMergeTree差不多,但是使用方面明显不一样。 SummingMergeTree我们来看例子,他的聚合不需要使用聚合函数。 创建表:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE test.test_summergetree

(

    `id` Int32 COMMENT 'id',

    `name` String COMMENT '名称',

    `money` AggregateFunction(sum, Decimal32(2)) COMMENT '工资',

    `create_at` DateTime COMMENT '创建时间'

)

ENGINE = SummingMergeTree

PARTITION BY toYYYYMM(create_at)

PRIMARY KEY id

ORDER BY id

SAMPLE BY id

TTL create_at + toIntervalMonth(1)
 

插入数据:

代码语言:javascript
代码运行次数:0
运行
复制
insert into table test_summergetree select 1,'测试',100,now();

insert into table test_summergetree select 1,'测试',200,now();

insert into table test_summergetree select 1,'测试',400,now();

insert into table test_summergetree select 1,'测试222',400,now();

insert into table test_summergetree select 1,'测试222',600,now();

insert into table test_summergetree select 11,'测试222',600,now();

insert into table test_summergetree select 11,'测试222',800,now();

等了一会之后我们查询数据结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
┌─id─┬─name─┬───money─┬───────────create_at─┐

│  1 │ 测试 │ 1700.00 │ 2021-03-27 19:44:23 │

└────┴──────┴─────────┴─────────────────────┘

┌─id─┬─name────┬──money─┬───────────create_at─┐

│ 11 │ 测试222 │ 600.00 │ 2021-03-27 19:45:37 │

└────┴─────────┴────────┴─────────────────────┘

┌─id─┬─name────┬──money─┬───────────create_at─┐

│ 11 │ 测试222 │ 800.00 │ 2021-03-27 19:45:42 │

└────┴─────────┴────────┴─────────────────────┘

┌─id─┬─name────┬──money─┬───────────create_at─┐

│ 11 │ 测试222 │ 800.00 │ 2021-03-27 19:45:54 │

└────┴─────────┴────────┴─────────────────────┘
 

id为1的已经聚合成功了,但是id为11还没有聚合成功。 SummingMergeTree主要是用于主键聚合的计算。

数据副本 只有 MergeTree 系列里的表可支持副本:只有如下的引擎支持复制表。其实就是在对应的引擎前面加上Replicated即可。(我这里特殊说明一下,之前我们用复制表引擎,买了阿里云的clickhouse,结果插入数据会丢失,问了阿里云的人,他们说单副本不支持复制表引擎,这里可以说其实是他们自己服务搭建的架构有bug,因为这样的问题我们当时查了3天,才查出来这个原因。) ReplicatedMergeTree ReplicatedSummingMergeTree ReplicatedReplacingMergeTree ReplicatedAggregatingMergeTree ReplicatedCollapsingMergeTree ReplicatedVersionedCollapsingMergetree ReplicatedGraphiteMergeTree

日志引擎系列,这些引擎是为了需要写入许多小数据量(少于一百万行)的表的场景而开发的。 StripeLog Log TinyLog

还有一些特殊引擎 URL:用于管理远程 HTTP/HTTPS 服务器上的数据 Memory:引擎以未压缩的形式将数据存储在 RAM 中 分布式引擎:本身不存储数据, 但可以在多个服务器上进行分布式查询。分布式表其实就是视图,主要是分布式集群用于查询多个节点的数据的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 利志分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档