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;
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17528