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

ClickHouse进阶(六):副本与分片-2-Distributed引擎

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!

 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频


目录

1. 分布式表插入数据

2. 分片规则

3. 删除分布式表


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

Distributed分布式引擎语法:

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

对以上语法解释:

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

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

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

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

  1. 本地表:通常以_local为后缀进行命名。本地表是承接数据的载体,可以使用非Distributed的任意表引擎,一张本地表对应了一个数据分片。
  2. 分布式表:通常以_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将数据写入到不同的节点分片中。

1. 分布式表插入数据

在任意节点向分布式表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

​​​​​​​2. 分片规则

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

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

Distributed(cluster,database,table,userid)

可以按照随机数划分:

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

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

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

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

​​​​​​​3. 删除分布式表

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

drop table person_score_all on cluster clickhouse_cluster_3shards_1replicas;

👨‍💻如需博文中的资料请私信博主。


http://www.lryc.cn/news/150354.html

相关文章:

  • Git和Github的基本用法
  • 279. 完全平方数
  • 一篇文章学会C#的正则表达式
  • 智慧工地源码 智慧大屏、手机APP、SaaS模式
  • C# WPF监听USB插入拨出
  • Prometheus监控(三)架构
  • linux kvm网桥br简单理解和持久化配置
  • 【LeetCode-中等题】105. 从前序与中序遍历序列构造二叉树
  • uniapp 配置网络请求并使用请求轮播图
  • c#在MVC Api(.net framework)当中使用Swagger,以及Demo下载
  • Linux 常见命令操作
  • 前端实习第七周周记
  • DevOps理念:开发与运维的融合
  • windows下Mysql安装配置教程
  • [开发|java] activeJdbc的model的isModified方法说明
  • 23062day6
  • MiniExcel
  • 全球公链进展| Shibarium重新开放跨链桥提款;USDC计划在Polygon PoS等 6 个新区块链上推出
  • 关于C# halcon内存泄漏的研究
  • 高精度地图定位在高速公路自动驾驶系统中的应用
  • 【Apollo学习笔记】——规划模块TASK之SPEED_HEURISTIC_OPTIMIZER
  • R语言APRIORI关联规则、K-MEANS均值聚类分析中药专利复方治疗用药规律网络可视化...
  • 3. MySql 5.7安装方式
  • Flink 如何定位反压节点?
  • LeetCode-1005-K次取反后最大化的数组和-贪心算法
  • Linux内核源码分析 (5)多处理器调度
  • 华为云云服务器评测|华为云云耀云服务器L实例使用教学
  • 这个在线网站让你三分钟制作出一份精美简历
  • Sql 函数传递参数 字符串拼接
  • java八股文面试[多线程]——两个线程交替打印1-100之间的数字