利志分享
fast_forward
view_headline
go教程
clickhouse教程
python教程
shell教程
原创杂文
打赏
go教程
clickhouse教程
python教程
shell教程
原创杂文
打赏
clickhouse入门
clickhouse概述
clickhouse安装和部署
clickhouse数据类型
clickhouse表引擎学习
clickhouse表引擎学习2
clickhouse的sql语法功能1-创建库,创建表等
clickhouse的sql语法2之select功能
clickhouse的sql语法3之alter和show功能
clickhouse的sql语法4之system的了解-查看当前实时连接数
clickhouse的sql语法5之账号授权功能
clickhouse实战
clickhouse实现漏斗功能
clickhouse实现留存数和留存率计算
目录
clickhouse入门
clickhouse概述
clickhouse安装和部署
clickhouse数据类型
clickhouse表引擎学习
clickhouse表引擎学习2
clickhouse的sql语法功能1-创建库,创建表等
clickhouse的sql语法2之select功能
clickhouse的sql语法3之alter和show功能
clickhouse的sql语法4之system的了解-查看当前实时连接数
clickhouse的sql语法5之账号授权功能
clickhouse实战
clickhouse实现漏斗功能
clickhouse实现留存数和留存率计算
clickhouse表引擎学习2
阅读:28
分享次数:0
合并树家族 AggregatingMergeTree 该引擎继承自 MergeTree,并改变了数据片段的合并逻辑。 ClickHouse 会将一个数据片段内所有具有相同主键(准确的说是 排序键)的行替换成一行,这一行会存储一系列聚合函数的状态。 该引擎的功能主要是做增量数据聚合统计,包过物化视图函数聚合。 下面我们看个使用例子: 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语句进行数据插入 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我们来看例子,他的聚合不需要使用聚合函数。 创建表: 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) 插入数据: 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(); 等了一会之后我们查询数据结果如下: ┌─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 中 分布式引擎:本身不存储数据, 但可以在多个服务器上进行分布式查询。分布式表其实就是视图,主要是分布式集群用于查询多个节点的数据的。
感觉本站内容不错,读后有收获?
attach_money
我要小额打赏,鼓励作者写出更好的教程
扫码关注公众号:talk_lizhi