方法一
查看表的分区键
select d.nspname||'.'||a.relname as table_name,string_agg(b.attname,',') as column_name
from
pg_catalog.pg_class a
inner join
pg_catalog.pg_attribute b
on a.oid=b.attrelid
inner join
pg_catalog.gp_distribution_policy c
on a.oid=c.localoid
inner join pg_catalog.pg_namespace d
on a.relnamespace=d.oid
where a.relkind='r' and b.attnum=any(c.attrnums)
and a.relname not like '%prt%'
group by table_name
order by table_name desc;
方法二
创建一张表,在没有primary key 或者 unique key 的情况下,GreenPlum默认会把第一个column作为分布键 zwcdb=# create table tab01(id int,name varchar(20));NOTICE: Table doesnt have DISTRIBUTED BY clause -- Using column named id as the Greenplum Da
创建一张表,在没有primary key 或者 unique key 的情况下,GreenPlum默认会把第一个column作为分布键
1
2
3
4
5
6
7
8
9
10
11
12
13
|
zwcdb=# create table tab01(id int , name varchar (20));
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
zwcdb=#
zwcdb=# d+ tab01
Table "public.tab01"
Column | Type | Modifiers | Storage | Description
id | integer | | plain |
name | character varying (20) | | extended |
Has OIDs: no
Distributed by : (id)
|
使用以下语句修改分布键
1
2
3
4
5
6
7
8
9
10
|
zwcdb=# alter table tab01 set distributed by ( name );
ALTER TABLE
zwcdb=# d+ tab01
Table "public.tab01"
Column | Type | Modifiers | Storage | Description
id | integer | | plain |
name | character varying (20) | | extended |
Has OIDs: no
Distributed by : ( name )
|
在不确定哪个column为分布键的情况下可以使用randomly策略
1
2
3
4
5
6
7
8
9
10
11
12
|
zwcdb=# alter table tab01 set distributed randomly;
ALTER TABLE
zwcdb=# alter table tab01 set with (reorganize= true );
ALTER TABLE
zwcdb=# d+ tab01
Table "public.tab01"
Column | Type | Modifiers | Storage | Description
id | integer | | plain |
name | character varying (20) | | extended |
Has OIDs: no
Distributed randomly
|