当前位置: 首页 > news >正文

大数据ClickHouse进阶(六):Distributed引擎深入了解

文章目录

Distributed引擎深入了解

一、简单介绍

二、分布式表插入数据

三、​​​​​​​分片规则

四、删除分布式表


Distributed引擎深入了解

一、简单介绍

Distributed引擎和Merge引擎类似,本身不存放数据,功能是在不同的server上把多张相同结构的物理表合并为一张逻辑表。

Distributed分布式引擎语法:

Distributed(cluster_name, database_name, table_name[, sharding_key])

对以上语法解释:

  • cluster_name:集群名称,与集群配置文件metrika.xml中的自定义名称相对应。
  • database_name:数据库名称。
  • table_name:表名称。
  • sharding_key:可选的,用于分片的key值,在数据写入的过程中,分布式表会依据分片key的规则,将数据分布到各个节点的本地表。

注意:创建分布式表是读时检查的机制,也就是说对创建分布式表和本地表的顺序并没有强制要求。

我们在ClickHouse集群中各个节点上创建好了本地表person_socre,每个节点上也有不同的数据,我们需要创建分布式表来映射当前表所有数据,方便查询数据结果,如下图所示:

从实体表层面上来看,一张分片表由两部分组成: 

  • 本地表:通常以_local为后缀进行命名。本地表是承接数据的载体,可以使用非Distributed的任意表引擎,一张本地表对应了一个数据分片。
  • 分布式表:通常以_all为后缀进行命名,分布式表只能使用Distribute表引擎,它与本地表形成一对多的映射关系,日后将通过分布式表代理操作多张本地表。

创建person_score_all分布式表:

Create table person_score_all on cluster ClickHouse_cluster_3shards_1replicas (
id UInt32,
name String,
age UInt32,
gender String,
score Decimal(9,2)
)engine = Distributed(ClickHouse_cluster_3shards_1replicas,default,person_score,id);

 任意一台ClickHouse节点查询分布式表person_score_all中的数据:

select * from person_score_all;

有了分布式表之后,我们就可以向分布式表中插入数据,那么分布式表会根据配置的sharding_key将数据写入到不同的节点分片中。

二、分布式表插入数据

在任意节点向分布式表person_score_all中插入数据:

insert into person_score_all values (7,'a1',30,'f',1000),(8,'a2',31,'f',1001),(9,'a3',32,'f',1002),(10,'a4',33,'f',1003),(11,'a5',34,'f',1004),(12,'a6',35,'f',1005);

任意节点查询对应的person_score_all表:

select * from person_score_all;

#可以针对每张本地表进行optimize 合并数据,不能针对分布式表进行合并
#在node1上执行如下命令
node1 :) optimize table person_score;

#在node2上执行如下命令
node1 :) optimize table person_score;

#在node3上执行如下命令
node1 :) optimize table person_score;

#最终查询分布式表person_score_all

三、​​​​​​​分片规则

分片键sharding_key要求返回一个整形类型的取值,包括Int系列和UInt系列,分片键sharding_key可以使如下几种情况:

可以是一个具体的整形列字段:

Distributed(cluster,database,table,userid)

可以按照随机数划分:

Distributed(cluster,database,table,rand())

可以按照某个整形列进行散列值划分:

Distributed(cluster,database,table,intHash64(userid))

注意:如果不声明分片键,那么分布式表只能包含一个分片,这意味着只能映射一张本地表,否则,在写入数据时将会报错。如果分布式表只包含一个分片,也就失去了分布式的意义,所以虽然分片键是选填参数,但是通常都会按照业务规则进行设置。

四、删除分布式表

删除分布式表person_score_all,任意ClickHouse节点直接执行如下命令:

drop table person_score_all on cluster ClickHouse_cluster_3shards_1replicas;

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

相关文章:

  • PyTorch、TensorFlow和Jax构建神经网络模型的标准化流程
  • 【最详细demo】雪花算法详细解释
  • 基于JavaSwing开发扫雷小游戏(不同版本) 课程设计 大作业
  • 【云原生 | Kubernetes 系列】---Ceph集群安装部署
  • 分组卷积/转置卷积/空洞卷积/反卷积/可变形卷积/深度可分离卷积/DW卷积/Ghost卷积/
  • java计算机专业招聘网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • 如何用Python自动爬取全国30+城市地铁图数据?
  • 手把手教大家编译 flowable 源码
  • 2022主流内网穿透技术分享(含NAS)
  • 常见遍历方法 for循环、forEach、map、filter、find、findIndex、some、every
  • STM32国产替代方案
  • 学js的第十七天
  • 搭建自己的云存储空间|FastDFS分布式文件系统考虑一下?
  • <哈希及模拟实现>——《C++高阶》
  • 【力扣】两数之和 II - 输入有序数组
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 2017前端实习生面试总结
  • centos安装java运行环境jdk+tomcat
  • EOS是什么
  • golang 发送GET和POST示例
  • learning koa2.x
  • Magento 1.x 中文订单打印乱码
  • Rancher-k8s加速安装文档
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SOFAMosn配置模型
  • STAR法则
  • Vue.js源码(2):初探List Rendering
  • Vue官网教程学习过程中值得记录的一些事情
  • vue数据传递--我有特殊的实现技巧
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 猴子数据域名防封接口降低小说被封的风险
  • 前嗅ForeSpider采集配置界面介绍
  • 硬币翻转问题,区间操作
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​什么是bug?bug的源头在哪里?
  • # centos7下FFmpeg环境部署记录
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)Windows2003安全设置/维护
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ SNOI 2013 ] Quare
  • [ABC294Ex] K-Coloring
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [Android]一个简单使用Handler做Timer的例子
  • [C#基础]说说lock到底锁谁?
  • [C]整形提升(转载)
  • [C++] 统计程序耗时