在前面Greenplum-表的分布策略文章中,我们学习了Greenplum的几种表分布的策略,包括HASH分布、随机分布、复制表三种分布策略。
表的分布策略可以实现表的数据能否均匀的分布在不同的Segment实例中。除了表的分布策略以外,Greenplum还支持对表进行分区。
分区是在每个Segment内部的行为,将表创建为分区表后,表会拆分为ROOT表和子分区表,数据都存放在子分区表中,ROOT表不存储数据。
Greenplum中的分区有两种方式:list(列表)分区及range(范围)分区。这两个分区方式可以随意组合形成多级分区。
range(范围)分区
通过PARTITION BY RANGE语法来定义
示例1:
=# CREATE TABLE sales
( id int,
date date,
amt decimal(10,2)
) DISTRIBUTED BY (id) PARTITION BY RANGE (date) (
START (date '2020-01-01') INCLUSIVE
END (date '2021-01-01') EXCLUSIVE EVERY (INTERVAL '1' month') );
NOTICE: CREATE TABLE will create partition "sales_1_prt_1" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_2" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_3" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_4" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_5" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_6" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_7" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_8" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_9" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_10" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_11" for table "sales"
NOTICE: CREATE TABLE will create partition "sales_1_prt_12" for table "sales"
CREATE TABLE
qianbase=# \d+ sales
Table "public.sales"
Column | Type | Modifiers | Storage | Stats target | Description
--------+---------------+-----------+---------+--------------+-------------
id | integer | | plain | |
date | date | | plain | |
amt | numeric(10,2) | | main | |
Child tables: sales_1_prt_1,
sales_1_prt_10,
sales_1_prt_11,
sales_1_prt_12,
sales_1_prt_2,
sales_1_prt_3,
sales_1_prt_4,
sales_1_prt_5,
sales_1_prt_6,
sales_1_prt_7,
sales_1_prt_8,
sales_1_prt_9
Distributed by: (id)
Partition by: (date)
示例2:
=# CREATE TABLE rank
( id int,
rank int,
year int,
gender char(1),
count int
) DISTRIBUTED BY (id) PARTITION BY RANGE (year) (
START (2020) END (2021) EVERY

4130

被折叠的 条评论
为什么被折叠?



