greenplum分区表详解

2023-03-17 00:00:00 字段 专区 分区 分区表 个子

分区:按照字段逻辑进行逻辑划分的区域,把一张大表进行按照适合的维度进行分割,通过表的继承,规则,约束实现的,有助于提高数据查询性能,利于数据仓库的维护工作。

分区分类:

(1)列表分区

--为表p的id2字段创建列表分区
create table p(
id1 integer,
id2 varchar(10))
distribute by(id1)
partition by list(id2)
(
partition p1 values ('1','2') --子分区p1包含的值为('1','2')
partition p2 values ('3','0') --子分区p2包含的值为(‘3’,‘0’)
default partition pd --其他值默认为pd分区
)
);
(2)范围分区

--为p表的id3字段创建范围分区

create table p
(id1 integer,
id2 varchar(10),
id3 date,
id4 interger)
distributed by (id1)
--从1号到31号每一天为一个子分区表
partition by range(id4)
( START (1) END (31) every(1),
default partition none
);
--指定时间区间作为子分区
--分区的values必须是与分区表分区键类型对应的值,如无对应分区,数据插入时会出错。
--且不需要一次性将所有分区写入,有分区表存储过程可自动增加相应分区
partition by range(id3)
( partition p1 START ('2018-08-20') END ('2018-09-20'),
partition p2 START ('2018-09-21') END ('2018-09-31'),
default partition other
);
--从18年到19年每七天为一个子分区表
partition by range(id3)
( START (id3 '2018-01-01') INCLUSIVE
END (id3 '2019-01-01') EXCLUSIVE
EVERY (INTERVAL '7 day')
);

(3)组合/多级分区

--首先以period字段为表p建立一级范围分区,指定从18年到19年每一个月为一个子分区表
--子分区表以region字段为一级分区建立二级子分区
create table p(
id int,
period date,
Sales decimal(9,6),
Region varchar(500)
)
distributed by (id)
partition by range (period)
subpartition by list (region)
subpartition template
(
subpartition usa values ('usa'),
subpartition asia values ('asia'),
subpartition europe values ('europe'),
default subpartition other
)
(
start ('2018-01-01') inclusive
end ('2019-01-01') exclusive
every (interval '1 month'),
default partition other
);


本文来源:https://blog.csdn.net/double_happiness/article/details/83273453

相关文章