进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注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])
对以上语法解释:
注意:创建分布式表是读时检查的机制,也就是说对创建分布式表和本地表的顺序并没有强制要求。
我们在clickhouse集群中各个节点上创建好了本地表person_socre,每个节点上也有不同的数据,我们需要创建分布式表来映射当前表所有数据,方便查询数据结果,如下图所示:
从实体表层面上来看,一张分片表由两部分组成:
创建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;
如需博文中的资料请私信博主。