Greenplum-表的分布策略

本文介绍了Greenplum数据库中表的三种分布策略:HASH分布、随机分布和复制表。默认采用HASH分布,依据指定列进行数据路由。随机分布使数据均匀分散但可能影响SQL性能。复制表则将所有记录复制到每个节点,适用于小表。创建表时,可使用DISTRIBUTED BY、DISTRIBUTED RANDOMLY和DISTRIBUTED REPLICATED语法来指定分布策略。
摘要由CSDN通过智能技术生成

Greenplum中所有的表都是必须分布存放的,这样可以充分利用MPP的并发特性。
在创建表时可以指定不同的分布策略,包括三种分布策略:HASH分布、随机分布和复制表。

HASH分布

概念:选择一个列或多个列作为数据表的分布键,通过hash计算,将插入的数据路由到特定的segment上。
HASH分布是默认的分布策略。也可通过指定DISTRIBUTED BY语法来指定使用HASH分布。
注:当建表时未定义分布键时,如果表有主键,使用主键字段作为默认的分布键;如果表上没有主键,默认按照第一个字段来分布。

示例:

=# create table dist1(a int, b text);
NOTICE:  Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Database data distribution key for this table.
HINT:  The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
CREATE TABLE
=# \d dist1
Table "public.dist1"
Column |  Type   | Modifiers
--------+---------+-----------
a      | integer |
b      | text    |
Distributed by: (a)
=# create table dist1(a int, b text, primary key (b));
CREATE TABLE
=# \d dist1
Table "public.dist1"
Column |  Type   | Modifiers
--------+---------+-----------
a      | integer |
b      | text    | not null
Indexes:
"dist1_pkey" PRIMARY KEY, btree (b)
Distributed by: (b)

随机分布

概念:数据随机分散在每一个节点中,可以保证数据平均分布,但是在执行 SQL 的过程中,关联等操作都需要将数据重分布,性能较差。
通过指定DISTRIBUTED RANDOMLY语法来指定使用随机分布。
注:如果表上有主键,不能创建为随机分布表。
示例:

=# create table dist1(a int, b text, primary key (a)) distributed randomly;
ERROR:  PRIMARY KEY and DISTRIBUTED RANDOMLY are incompatible
=# create table dist1(a int, b text) distributed randomly;
CREATE TABLE
=# \d dist1
Table "public.dist1"
Column |  Type   | Modifiers
--------+---------+-----------
a      | integer |
b      | text    |
Distributed randomly

注:如果想将默认的分布策略设置为随机分布,我们可以通过设置gp_create_table_random_default_distribution值为on来实现,默认值为off。
gpconfig --show 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

复制表

概念:每一条记录都会分布到整个集群的所有Instance上,仅用于小表。
通过指定DISTRIBUTED REPLICATED语法来指定使用复制表。

示例:

=# create table dist1(a int, b text, primary key (a)) distributed replicated;
CREATE TABLE
qianbase=# \d dist1
Table "public.dist1"
Column |  Type   | Modifiers
--------+---------+-----------
a      | integer | not null
b      | text    |
Indexes:
"dist1_pkey" PRIMARY KEY, btree (a)
Distributed Replicated
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值