《手摸手带你学ClickHouse》之AggregatingMergeTree表引擎

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注。

文章目录

        • 1、基本使用
        • 2、结合物化视图使用

前文回顾:
《手摸手带你学ClickHouse》之安装部署
《手摸手带你学ClickHouse》之访问接口
《手摸手带你学ClickHouse》之导入导出数据
《手摸手带你学ClickHouse》之MergeTree系列表引擎
《手摸手带你学ClickHouse》之ReplacingMergeTree表引擎
《手摸手带你学ClickHouse》之CollapsingMergeTree表引擎
《手摸手带你学ClickHouse》之VersionedCollapsingMergeTree表引擎
《手摸手带你学ClickHouse》之SummingMergeTree表引擎



1、基本使用

AggregatingMergeTree 和 SummingMergeTree 原理类似,都是对数据进行聚合操作,不同的是,这个可以针对某个字段使用某种聚合函数。例如

CREATE TABLE tb_aggregating(
id Int8,
city String,
v1 AggregateFunction(uniq,String),
v2 AggregateFunction(sum,UInt32),
v3 AggregateFunction(avg,Float64),
create_time DateTime
)ENGINE = AggregatingMergeTree()
PARTITION BY toYYYYMM(create_time)
PRIMARY KEY id
ORDER BY (id,city);

ORDER BY(id,city) 除了排序之外,还表示字段 id 和 city 是聚合条件,等同于 GROUP BY id,city。
v1、v2 和 v3 是聚合字段,等同于 UNIQ(v1),SUM(v2),AVG(v3)。

插入数据时比较特殊

  • 需要调用与 uniq、sum、avg 对应的 uniqState、sumState、avgState 函数。
  • 需要使用 INSERT INTO SELECT 语法。
insert into tb_aggregating
select 1,'km',uniqState('test1'),sumState(toUInt32(80)),avgState(toFloat64(100)),now();
insert into tb_aggregating
select 1,'km',uniqState('test1'),sumState(toUInt32(30)),avgState(toFloat64(90.81)),now();
insert into tb_aggregating
select 3,'km',uniqState('test2'),sumState(toUInt32(50)),avgState(toFloat64(60)),now();
insert into tb_aggregating
select 3,'bj',uniqState('test3'),sumState(toUInt32(200)),avgState(toFloat64(70.99)),'2021-07-02 17:02:12';

合并分区后,查询数据,但是这里查询数据也有所不同。也需要调用与 uniq、sum、avg 对应的 uniqMerge、sumMerge、avgMerge 函数。

select id,city,uniqMerge(v1),sumMerge(v2),avgMerge(v3) from tb_aggregating
GROUP BY id,city;

《手摸手带你学ClickHouse》之AggregatingMergeTree表引擎_第1张图片


2、结合物化视图使用

这个引擎的主流用法是结合物化视图使用,并将物化视图的表引擎指定为 AggregatingMergeTree。

啥意思呢,请看下图所示:

《手摸手带你学ClickHouse》之AggregatingMergeTree表引擎_第2张图片
通常会使用一张底表来存储全量的明细数据,提供实时查询,然后数据会自动同步到物化视图,物化视图按照 AggregatingMergeTree 引擎规则处理,这样物化视图存储了聚合数据,查询时从物化视图查询即可。

首先,建立底表

CREATE TABLE tb_agg_basic(
id Int8,
city String,
v1 UInt32,
v2 Float64
)ENGINE=MergeTree()
PARTITION BY city
PRIMARY KEY id
ORDER BY (id,city);

建立物化视图

CREATE MATERIALIZED VIEW view_agg
ENGINE=AggregatingMergeTree()
PARTITION BY city
ORDER BY (id,city)
AS
SELECT id,city,sumState(v1) v1,avgState(v2) v2 
FROM tb_agg_basic
GROUP BY id,city;

向底表插入数据

insert into tb_agg_basic
values
(1,'km',80,100),
(1,'km',30,90),
(2,'km',50,60),
(3,'bj',200,70.99),
(3,'bj',10,30);

底表数据如下
《手摸手带你学ClickHouse》之AggregatingMergeTree表引擎_第3张图片
查询物化视图数据

select id,city,sumMerge(v1),avgMerge(v2) from view_agg
GROUP BY id,city;

《手摸手带你学ClickHouse》之AggregatingMergeTree表引擎_第4张图片



后续将继续更新该系列,大佬超手摸手带你学ClickHouse,敬请关注!!!


觉得有帮助点个赞吧!!!
原创不易,转载请注明出处。

微信扫一扫下方二维码即可关注我的公众号

你可能感兴趣的:(数据库,ClickHouse,ClickHouse,数据库,表引擎)