Greenplum创建和管理表

Greenplum中创建表和pg中类似,不过区别在于其表中的行会被分布在不用的segment中。我们需要在创建表的时候指定分布策略。

gp中的表有一些限制:
1、UNIQUE和PRIMARY KEY约束必须和它们所在表的分布键和分区键(如果有)兼容。
2、不支持外键,但是语法上允许外键约束,但不会起作用。
3、用户在分区表上定义的约束将作为整体应用到分区表上。用户不能在该表的单独的部分上定义约束。

所有gp中的都会被分布。当用户创建或者修改一个表时,用户可以有选择地指定DISTRIBUTED BY(哈希分布)或者 DISTRIBUTED RANDOMLY(循环分布)来决定该表的行分布。

在创建表的时候使用DISTRIBUTED BY和DISTRIBUTED RANDOMLY子句指定一个表的分布策略。默认是使用PRIMARY KEY(如果表有主键)或者表的第一个列作为分布键的哈希分布策略(允许使用多个列作为分布列)。几何或者用户定义数据类型的列不能作为Greenplum分布键列。如果一个表没有符合要求的列,建议使用随机或者循环方式分布行。

例子:
–不指定分布列
会提示使用第一列作为分布列

postgres=# CREATE TABLE t1(id int,info text);
NOTICE:  Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'id' as the Greenplum 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

–指定分布列

postgres=# CREATE TABLE t1(id int,info text)
postgres-# distributed by (id);
CREATE TABLE

–循环分布
如果所有的列都无法满足将数据均匀分布到所有segment节点的要求时,建议使用这种方法,会以随机或者循环方式分布行。

postgres=# CREATE TABLE t1(id int,info text)
postgres-# DISTRIBUTED RANDOMLY;
CREATE TABLE
发布了97 篇原创文章 · 获赞 25 · 访问量 8107

猜你喜欢

转载自blog.csdn.net/weixin_39540651/article/details/104051606