Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >分布式物化视图在clickhouse如何实现?

分布式物化视图在clickhouse如何实现?

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

物化视图在数据层面做指标大宽表有着举足轻重的作用,分布式物化视图是对物化视图存储的数据进行分布式读取。

之前我们有一个介绍过物化视图的文章,详情请点击:clickhouse物化视图的应用,这里我们已经介绍过物化视图是什么,如何使用。

下面我们这里来介绍一下分布式物化视图的使用。我们这里使用的是分布式clickhouse集群。版本是:20.3.10.75,下面我们就来详解分布式物化视图在clickhouse的使用。

1:首先我们还是来建立三个表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use my_test
CREATE TABLE user on cluster ch_cluster ( user_id UInt16,phone String,name String,create_time DateTime ) ENGINE = MergeTree() PARTITION BY toYYYYMM(create_time) ORDER BY (user_id) SETTINGS index_granularity = 8192;
CREATE TABLE bind on cluster ch_cluster ( user_id UInt16,phone String,create_time DateTime ) ENGINE = MergeTree() PARTITION BY toYYYYMM(create_time) ORDER BY (user_id) SETTINGS index_granularity = 8192;
CREATE TABLE user_info on cluster ch_cluster ( user_id UInt16,sig String,node String,create_time DateTime ) ENGINE = MergeTree() PARTITION BY toYYYYMM(create_time) ORDER BY (user_id) SETTINGS index_granularity = 8192;

2:分别在不同的节点插入数据,我这里有两个节点,我们每个节点插入如下数据。

节点1如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert into user values(1,'18475484454','张三',now()),(2,'18465484454','李四',now()),(3,'','王五',now()),(4,'','小狗',now())
insert into bind values(1,'18475484454',now()),(3,'18475484457',now())
insert into user_info values(1,'我的地盘我做主','我的签名',now()),(3,'我的地盘我做主2','我的签名2',now())

节点2如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert into user values(8,'18475484454','张三4',now()),(5,'18465484454','李四5',now()),(6,'','王五6',now()),(7,'','小狗7',now())
insert into bind values(7,'18475484454',now()),(5,'18475484457',now())
insert into user_info values(4,'我的地盘我做主','我的签名4',now()),(6,'我的地盘我做主6','我的签名6',now())

3:插入完数据之后,我们去每个节点查询,因为我们需要读所有的数据,则我们需要建一下分布式表来读数据。下面是建分布式表的语句。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE my_test.user_all on cluster ch_cluster(user_id UInt16,phone String,name String,create_time DateTime) ENGINE = Distributed('ch_cluster', 'my_test', 'user', rand());
CREATE TABLE my_test.bind_all on cluster ch_cluster(user_id UInt16,phone String,create_time DateTime) ENGINE = Distributed('ch_cluster', 'my_test', 'bind', rand());
CREATE TABLE my_test.user_info_all on cluster ch_cluster(user_id UInt16,sig String,node String,create_time DateTime) ENGINE = Distributed('ch_cluster', 'my_test', 'user_info', rand());

建立好上面的分布式表之后就能读集群所有节点的数据了。我这里贴一下user表的所有数据。

4:上面是基础的数据表,这里我们开始建物化视图表。下面的sql是把用户表,用户信息表,绑定表进行组合成大宽表,下面的脚本我们是在每个节点上存了一份快照,实际业务中我们是写数据到一个节点,不会一份数据存多份。我这里做例子就这么使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE MATERIALIZED VIEW my_test.big_user_view  on cluster ch_cluster ENGINE = MergeTree() PARTITION BY toYYYYMM(a.create_time) ORDER BY (a.user_id) POPULATE AS select a.user_id,a.name,a.create_time,b.phone,c.sig,c.node from my_test.user_all a global left join my_test.bind_all as b on a.user_id=b.user_id global left join my_test.user_info_all c on a.user_id=c.user_id;

5:上面的物化视图表我们建立好了,下面我们在物化视图表上建分布式表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE my_test.big_user_view_all on cluster ch_cluster as my_test.big_user_view ENGINE = Distributed('ch_cluster', 'my_test', 'big_user_view', rand());

好了,到这里我们已经可以通过物化视图分布式表读每个节点的物化视图了,业务中我们基于物化视图来做大宽表,读取物化视图分布式表是非常常见的。我之前记得之前有一篇"clickhouse物化视图在微信中应用"也是比较类似。

总结:

1:物化视图和普通表都可以建立分布式表。

2:物化视图分布式表常用于业务的大宽表使用。

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

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

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

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

评论
登录后参与评论
1 条评论
热度
最新
最后的 big_user_view_all 数据重复怎么处理
最后的 big_user_view_all 数据重复怎么处理
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
有料-clickhouse单机的增删查询实现方案和clickhouse分布式部署的增删查改实现方案
关于增删查改,很多同学都可能觉得这么简单的东西我还不会吗?嗯,大家是觉得简单,但是关于clickhouse的增删查改可还是值得深入了解一下,了解了他们的使用,对数据开发者来说,能避免不少的问题。
公众号-利志分享
2022/04/25
4700
ClickHouse DDL
数据库起到了命名空间的作用,可以有效规避命名冲突的问题,也为后续的数据隔离提供了支撑。任何一张数据表,都必须归属在某个数据库之下。创建数据库的完整语法如下所示:
CoderJed
2022/01/07
1.3K0
数据分析实战:kafka+clickhouse数据收集
clickhouse是一款强大的数据仓库选择,不需要额外的依赖;兼容SQL,还提供了许多引擎。我们考虑使用,kafka作为分析数据的收集,各个服务节点只要向kafka发送数据,而无需关心数据的落地。
yield9tk
2022/04/20
1.6K0
你想要的-提高统计clickhouse的查询效率,clickhouse物化视图的应用
相信很多做数据开发的同学总会听到这样的吐槽,哈哈,怎么解决这种问题是数据开发同学头痛问题。
公众号-利志分享
2022/04/25
1.2K0
你想要的-提高统计clickhouse的查询效率,clickhouse物化视图的应用
"氮气加速器"- 同步物化视图,让查询速度"飞"起来
深夜凌晨两点,数据工程师小张还在加班处理各种复杂的数据分析需求。"这个查询速度也太慢了,都等了半天了还没出结果..." 他揉了揉疲惫的双眼,忍不住吐槽。这不,又收到产品经理的"红色感叹号"消息:"那个实时大屏怎么又卡住了?"
一臻数据
2024/12/24
510
"氮气加速器"- 同步物化视图,让查询速度"飞"起来
ClickHouse(06)ClickHouse建表语句DDL详细解析
创建新表具有几种种语法形式,具体取决于用例。默认情况下,仅在当前服务器上创建表。分布式DDL查询作为子句实现,该子句另外描述。
张飞的猪
2024/03/09
8260
ClickHouse(06)ClickHouse建表语句DDL详细解析
「ClickHouse系列」实时分析优化AggregateFunction及物化视图
AggregatingMergeTree有些许数据立方体的意思,它能够在合并分区的时候,按照预先定义的条件,聚合数据。
王知无-import_bigdata
2022/04/13
3.2K0
「ClickHouse系列」实时分析优化AggregateFunction及物化视图
​深入浅出 ClickHouse 物化视图
数据库查询语言(query language)是数据库管理系统(DBMS)提供给用户和数据库交互的工具,查询语言分为三类 [^1]:
腾讯技术工程官方号
2023/07/15
2.5K0
​深入浅出 ClickHouse 物化视图
ClickHouse 物化视图学习总结
创建源表,因为我们的目标涉及报告聚合数据而不是单条记录,所以我们可以解析它,将信息传递给物化视图,并丢弃实际传入的数据。这符合我们的目标并节省了存储空间,因此我们将使用Null表引擎。
授客
2024/12/10
1930
ClickHouse物化视图在微信的实战经验
ClickHouse广泛用于用户和系统日志查询场景中,借助腾讯云提供基础设施,微信也在分阶段逐步推进clickhouse的建设和应用,目前作为基础建设的一部分,主要针对于OLAP场景,为业务方提供稳定高效的查询服务。
Vitamin_C
2021/06/08
4.9K1
ClickHouse物化视图在微信的实战经验
ClickHouse *MergeTree表引擎
Clickhouse 中最强大的表引擎当属 MergeTree引擎及*MergeTree中的其他分支引擎。
MySQL轻松学
2019/09/20
5.6K0
微博基于ClickHouse灵活监控百亿流量下的业务指标
朱伟,微博广告SRE团队负责人,《智能运维:从0搭建大规模分布式AIOps系统》作者之一。目前负责微博广告业务可用性的保障与优化、资源利用率的提升、监控报警系统的建设以及自动化体系的推进。
Fayson
2019/07/17
2.7K0
微博基于ClickHouse灵活监控百亿流量下的业务指标
[1183]Clickhouse数据表&数据分区partition&数据生命周期操作
也可以直接去看官方文档:https://clickhouse.com/docs/zh/sql-reference/statements/alter/column
周小董
2023/10/10
1.6K0
ClickHouse SQL基本语法和导入导出实战
数据库起到了命名空间的作用,可以有效规避命名冲突的问题,也为后续的数据隔离提供了支撑。任何一张数据表,都必须归属在某个数据库之下。
王知无-import_bigdata
2022/04/13
2.7K0
ClickHouse SQL基本语法和导入导出实战
ClickHouse数据库数据定义手记之不一般的DDL和DML
前提 前面一篇文章已经很详细地介绍了ClickHouse中每种数据类型的定义和基本使用,这篇文章会详细地介绍ClickHouse中的DDL和DML,很多操作区别于传统的DBMS,特别是代价巨大的DEL
Throwable
2020/12/29
1.8K0
ClickHouse系列--消费kafka数据
kafka_broker_list :逗号分隔的brokers地址 (localhost:9092). kafka_topic_list :Kafka 主题列表,多个主题用逗号分隔. kafka_group_name :消费者组. kafka_format – Message format. 比如JSONEachRow、JSON、CSV等等
IT云清
2021/12/06
1.1K0
Clickhouse 分布式表&本地表 &ClickHouse实现时序数据管理和挖掘
◆ 一、CK 分布式表和本地表 (1)CK是一个纯列式存储的数据库,一个列就是硬盘上的一个或多个文件(多个分区有多个文件),关于列式存储这里就不展开了,总之列存对于分析来讲好处更大,因为每个列单独存储,所以每一列数据可以压缩,不仅节省了硬盘,还可以降低磁盘IO。 (2)CK是多核并行处理的,为了充分利用CPU资源,多线程和多核必不可少,同时向量化执行也会大幅提高速度。 (3)提供SQL查询接口,CK的客户端连接方式分为HTTP和TCP,TCP更加底层和高效,HTTP更容易使用和扩展,一般来说HTTP足矣,社
IT大咖说
2022/03/25
4.2K0
Clickhouse部署和基本使用1
https://clickhouse.tech/docs/en/sql-reference/statements/create/table/
TDSQL-A助手
2021/06/06
1.7K0
ClickHouse原理解析与应用实战
◆ ClickHouse概念 clickhouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS),由俄罗斯最大的搜索公司Yandex开发,于2016年开源,采用c++开发。 ◆ OLAP 和 OLTP 这两个概念 OLAP(On-Line Analytical Processing):联机分析处理OLAP(On-Line Analytical Processing),仓库型数据库,主要是读取数据,做复杂数据分析(多维),侧重技术决策支持,提供直观简单的结果,开源OLAP引擎包含Hive、Sp
IT大咖说
2022/06/17
2.1K0
ClickHouse原理解析与应用实战
ClickHouse性能优化?试试物化视图
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS);目前我们使用CH作为实时数仓用于统计分析,在做性能优化的时候使用了 物化视图 这一特性作为优化手段,本文主要分享物化视图的特性与如何使用它来优化ClickHouse的查询性能。
陶陶技术笔记
2021/04/14
3.2K0
推荐阅读
相关推荐
有料-clickhouse单机的增删查询实现方案和clickhouse分布式部署的增删查改实现方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验