GBase 8a
运维管理
文章

如何尽量规避8A的数据分布不倾斜以及如何强制通过insert-select将源表数据随机平均分布插入到目标表

发表于2025-02-15 21:28:59168次浏览2个评论

首先,我们都知道gbase8a是一个MPP分布式OLAP集群数据库,其表的形态也包括了分布表(随机表、HASH分布表)以及复制表。

大多的初始使用者在创建表时,基本上没有去指定distributed,而是依照ORACLE等的习惯create 。。。创建了表。

当我们这样默认创建时,且数据通过insert values进入,或者是在关联跑批等场景经过了sort处理等insert到这样的表时,经常会造成表的倾斜,数据集中在某一个节点;

第一:为避免该场景的出现,从产品的角度上建议所有的事实表最好能依照业务选择合适的HASH分布健而非随机表,当不得不随机表时也需要打开参数gcluster_random_insert,以确保insert value场景下数据能够分布在各个节点:

参数说明如下:
gcluster_random_insert
用于控制随机分布表 在执行 insert value时,发起的集群节点上存在单机 时,数据分布到单机的原则。
0:insert value数据都落在和发起集群节点相同的单机上;
1:insert value进入的每条数据,采用random()%分片数 原则,随机 落在任意单机 节点 。

 

第二:已有的倾斜表,如何通过转储让其均匀分布的到一张相同结构的表呢?如果直接进行随机表转储(insert select)时会依照源表的分布情况一致,那么如何强制随机分布转储呢?

答案是使用hint进行处理

使用如下方式,首先gccli连接进入时加参数c,同时SQL中加hint控制。
eg:
gccli -ugbase -pxxxxx -c
gbase> insert into 目标表 select * from (select /+grouped(’-1’)/ * from 源表) t;

评论

登录后才可以发表评论
用户头像
levvel发表于 9个月前
进来看看,应该有收获
崔哥发表于 2个月前
黄师塔前江水东,春光懒困倚微风。桃花一簇开无主,可爱深红爱浅红?