更新时间:2024-05-17 GMT+08:00
二级分区
二级分区(Sub Partition,也叫组合分区)是基本数据分区类型的组合,将表通过一种数据分布方法进行分区,然后使用第二种数据分布方式将每个分区进一步细分为子分区。给定分区的所有子分区表示数据的逻辑子集。常见的二级分区组合如下所示:
- Range-Range
- Range-List
- Range-Hash
- List-Range
- List-List
- List-Hash
- Hash-Range
- Hash-List
- Hash-Hash
示例如下:
--Range-Range
gaussdb=# CREATE TABLE t_range_range (
c1 INT,
c2 INT,
c3 INT
)
PARTITION BY RANGE (c1)
SUBPARTITION BY RANGE (c2)
(
PARTITION p1 VALUES LESS THAN (10) (
SUBPARTITION p1sp1 VALUES LESS THAN (5),
SUBPARTITION p1sp2 VALUES LESS THAN (10)
),
PARTITION p2 VALUES LESS THAN (20) (
SUBPARTITION p2sp1 VALUES LESS THAN (15),
SUBPARTITION p2sp2 VALUES LESS THAN (20)
)
);
gaussdb=# DROP TABLE t_range_range;
--Range-List
gaussdb=# CREATE TABLE t_range_list (
c1 INT,
c2 INT,
c3 INT
)
PARTITION BY RANGE (c1)
SUBPARTITION BY LIST (c2)
(
PARTITION p1 VALUES LESS THAN (10) (
SUBPARTITION p1sp1 VALUES (1, 2),
SUBPARTITION p1sp2 VALUES (3, 4)
),
PARTITION p2 VALUES LESS THAN (20) (
SUBPARTITION p2sp1 VALUES (1, 2),
SUBPARTITION p2sp2 VALUES (3, 4)
)
);
gaussdb=# DROP TABLE t_range_list;
--Range-Hash
gaussdb=# CREATE TABLE t_range_hash (
c1 INT,
c2 INT,
c3 INT
)
PARTITION BY RANGE (c1)
SUBPARTITION BY HASH (c2)
SUBPARTITIONS 2
(
PARTITION p1 VALUES LESS THAN (10),
PARTITION p2 VALUES LESS THAN (20)
);
gaussdb=# DROP TABLE t_range_hash;
--List-Range
gaussdb=# CREATE TABLE t_list_range (
c1 INT,
c2 INT,
c3 INT
)
PARTITION BY LIST (c1)
SUBPARTITION BY RANGE (c2)
(
PARTITION p1 VALUES (1, 2) (
SUBPARTITION p1sp1 VALUES LESS THAN (5),
SUBPARTITION p1sp2 VALUES LESS THAN (10)
),
PARTITION p2 VALUES (3, 4) (
SUBPARTITION p2sp1 VALUES LESS THAN (5),
SUBPARTITION p2sp2 VALUES LESS THAN (10)
)
);
gaussdb=# DROP TABLE t_list_range;
--List-List
gaussdb=# CREATE TABLE t_list_list (
c1 INT,
c2 INT,
c3 INT
)
PARTITION BY LIST (c1)
SUBPARTITION BY LIST (c2)
(
PARTITION p1 VALUES (1, 2) (
SUBPARTITION p1sp1 VALUES (1, 2),
SUBPARTITION p1sp2 VALUES (3, 4)
),
PARTITION p2 VALUES (3, 4) (
SUBPARTITION p2sp1 VALUES (1, 2),
SUBPARTITION p2sp2 VALUES (3, 4)
)
);
gaussdb=# DROP TABLE t_list_list;
--List-Hash
gaussdb=# CREATE TABLE t_list_hash (
c1 INT,
c2 INT,
c3 INT
)
PARTITION BY LIST (c1)
SUBPARTITION BY HASH (c2)
SUBPARTITIONS 2
(
PARTITION p1 VALUES (1, 2),
PARTITION p2 VALUES (3, 4)
);
gaussdb=# DROP TABLE t_list_hash;
--Hash-Range
gaussdb=# CREATE TABLE t_hash_range (
c1 INT,
c2 INT,
c3 INT
)
PARTITION BY HASH (c1)
PARTITIONS 2
SUBPARTITION BY RANGE (c2)
(
PARTITION p1 (
SUBPARTITION p1sp1 VALUES LESS THAN (5),
SUBPARTITION p1sp2 VALUES LESS THAN (10)
),
PARTITION p2 (
SUBPARTITION p2sp1 VALUES LESS THAN (5),
SUBPARTITION p2sp2 VALUES LESS THAN (10)
)
);
gaussdb=# DROP TABLE t_hash_range;
--Hash-List
gaussdb=# CREATE TABLE t_hash_list (
c1 INT,
c2 INT,
c3 INT
)
PARTITION BY HASH (c1)
PARTITIONS 2
SUBPARTITION BY LIST (c2)
(
PARTITION p1 (
SUBPARTITION p1sp1 VALUES (1, 2),
SUBPARTITION p1sp2 VALUES (3, 4)
),
PARTITION p2 (
SUBPARTITION p2sp1 VALUES (1, 2),
SUBPARTITION p2sp2 VALUES (3, 4)
)
);
gaussdb=# DROP TABLE t_hash_list;
--Hash-Hash
gaussdb=# CREATE TABLE t_hash_hash (
c1 INT,
c2 INT,
c3 INT
)
PARTITION BY HASH (c1)
PARTITIONS 2
SUBPARTITION BY HASH (c2)
SUBPARTITIONS 2
(
PARTITION p1,
PARTITION p2
);
gaussdb=# DROP TABLE t_hash_hash;
Interval分区看成是范围分区的一种特殊形式,目前不支持二级分区场景中定义Interval分区。
二级分区表的一级分区和二级分区分区键均只支持1列。
父主题: 分区策略