Greenplum数据分布和分区

本文详细介绍了Greenplum数据库中的三种数据分布策略:哈希分布、随机分布和复制分布。哈希分布通过指定分布键实现数据均匀分布,提高多表关联性能;随机分布将数据循环发送至各节点,虽保证数据平均分布但降低查询效率;复制分布则将数据完全复制至所有节点,适用于小表与大表联接或需访问全表数据的场景。

Greenplum数据分布和分区

数据分布

https://yq.aliyun.com/articles/57822
https://segmentfault.com/a/1190000022005788
http://www.dbdream.com.cn/2016/01/greenplum%E6%95%B0%E6%8D%AE%E5%BA%93%E5%88%9B%E5%BB%BA%E8%A1%A8%E5%8F%8A%E8%A1%A8%E7%9A%84%E6%95%B0%E6%8D%AE%E5%88%86%E5%B8%83/

由于GreenPlum是一个分布式数据库,表的数据当然是分布到所有Segment节点上,那么如何控制表中数据的分布呢?下面就来介绍下GreenPlum的数据分布策略。

哈希分布 随机分布 复制分布
适用版本 GP5,GP6 GP5,GP6 GP6
语句 DISTRIBUTED BY (column, [ … ]) DISTRIBUTED RANDOMLY DISTRIBUTED REPLICATED
默认策略
存储 1 segment 1 segment N segment
均匀分布 取决于分布键
查询性能 -
  • 哈希分布

创建表使用“DISTRIBUTED BY (column, [ … ])”子句,指定某个列或者某几个列的组合作为分布键。

散列算法使分布键将每一行分配给特定的segment。计算分布键的hash值,相同hash值的数据会散列到同一个segment上。选择唯一的分布键(例如Primary Key)将确保较均匀的数据分布。这样,哈希分布的多表关联时,如果关联字段都是分布键,相同hash值的数据肯定会分布到同一个segment,就可以在每个segment关联后,segment把结果发送到master节点,再由master节点汇总,将最终的结果返还客户端。

如果创建表时未提供DISTRIBUTED子句,则将PRIMARY KEY(如果表真的有的话)或表的第一个合格列用作分布键。什么类型的列是合格列呢?几何类型或用户自定义数据类型的列不能用作Greenplum分布键列。如果表中没有合格的列,则退化为随机分布策略。

但是,如果未提供DISTRIBUTED子句,Greenplum最后会选择哪种分布策略还会受其它因素的影响,例如:GUC gp_create_table_random_default_distribution和当时使用的优化器(optimizer)也将影响最终决定表的默认分布策略。因此,请千万不要忘记在CREATE TABLE时添加DISTRIBUTED BY子句。

gp_create_table_random_default_distribution设置为off,表的默认分布策略是哈希分布;设置为on,表的默认分布策略是随机分布。

[gpadmin@server100 ~]$ gpconfig -s gp_create_table_random_default_distribution
Values on all segments are consistent
GUC          : gp_create_table_random_default_distribution
Master  value: off
Segment value: off

默认分布策略为哈希分布,创建表时不指定分布键,默认使用第一个字段作为分布键。

testdb=# show gp_create_table_random_default_distribution;
 gp_create_table_random_default_distribution
---------------------------------------------
 off
(1 row)

testdb=# CREATE TABLE t_hash (name varchar(10), id int);
NOTICE:  Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'name' as the Greenplum Database data distribution key for this table.
HINT:  The 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值