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

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

前文回顾:
《手摸手带你学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;

在这里插入图片描述


2、结合物化视图使用

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

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

在这里插入图片描述
通常会使用一张底表来存储全量的明细数据,提供实时查询,然后数据会自动同步到物化视图,物化视图按照 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);

底表数据如下
在这里插入图片描述
查询物化视图数据

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

在这里插入图片描述



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


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

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

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[1\]中提到了一些将Vue 2代码转换为Vue 3的修改方法。首先,全局挂载的写法需要修改为使用createApp函数来创建Vue实例,并使用app.config.globalProperties来挂载全局属性。其次,组件库的引入方式和部分组件的用法可能会有所改变,需要根据具体的组件库文档进行修改。废弃语法也需要进行相应的修改,例如插槽语法、$set方法、@click.native语法等都需要根据Vue 3的语法进行改写。此外,生命周期的命名也有所修改,destroyed被重命名为unmounted,beforeDestroy被重命名为beforeUnmount。另外,Vue 3中的v-model用法也有所改变,需要参考官方文档进行修改。最后,需要注意在Vue 3中使用proxy来获取上下文方法,而不再使用this。总之,将Vue 2代码自动化转换为Vue 3需要根据具体的代码进行逐个修改,参考官方文档和相关文档进行调整。 #### 引用[.reference_title] - *1* *2* [你玩转Vue3——Vue2升级Vue3](https://blog.csdn.net/weixin_46709512/article/details/124966678)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue3的代码改成vue2的转换](https://blog.csdn.net/weixin_40945354/article/details/115392387)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大佬超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值