本文档介绍了如何对表的部分分区、全部分区及其所有的子分区重新组织分区结构,并且不丢失数据的方法。
语法
ALTER TABLE…REORGANIZE PARTITION命令用于对表的部分分区、全部分区及其所有的子分区重新组织分区结构,并且不丢失数据:
ALTER TABLE table_name
REORGANIZE PARTITION partition_names INTO (partition_definitions)
其中,partition_definitions
为:{list_partition | range_partition}
list_partition
为:PARTITION partition_name VALUES IN (value[, value]...) (subpartition, ...)
range_partition
为:PARTITION partition_name VALUES LESS THAN (value[, value]...) (subpartition, ...)
subpartition
为:{list_subpartition | range_subpartition | hash_partition | key_partition}
list_subpartition
为:SUBPARTITION [subpartition_name] VALUES IN (value[, value]...) [TABLESPACE tablespace_name]
range_subpartition
为:SUBPARTITION [subpartition_name ] VALUES LESS THAN (value[, value]...) [TABLESPACE tablespace_name]
hash/key_subpartition
为:SUBPARTITION [subpartition_name ] [TABLESPACE tablespace_name]
参数
参数 | 说明 |
---|---|
table_name | 表名。 |
list_partition | 需要更改的一个或多个现有分区的名称列表,以逗号分隔。 |
partition_definitions | 以逗号分隔的新分区定义列表。 |
partition_name | 需要创建的分区名称。
说明 分区名称在所有分区和子分区中必须是唯一的,且必须遵循给对象标识符命名的惯例。
|
subpartition_name | 需要创建的子分区名称。
说明 子分区名称在所有分区和子分区中必须是唯一的,且必须遵循给对象标识符命名的惯例。
|
示例
拆分
sales_range_range
表分区p_2021
为p_2021_1
、p_2021_2
,及其对应的所有子分区:ALTER TABLE sales_range_range REORGANIZE PARTITION p_2021 INTO (
PARTITION p_2021_1 VALUES LESS THAN (2021)(
SUBPARTITION q1_2021_1 VALUES LESS THAN(4),
SUBPARTITION q2_2021_1 VALUES LESS THAN(7),
SUBPARTITION q3_2021_1 VALUES LESS THAN(10),
SUBPARTITION q4_2021_1 VALUES LESS THAN(13)
),
PARTITION p_2021_2 VALUES LESS THAN (2022)(
SUBPARTITION q1_2021_2 VALUES LESS THAN(4),
SUBPARTITION q2_2021_2 VALUES LESS THAN(7),
SUBPARTITION q3_2021_2 VALUES LESS THAN(10),
SUBPARTITION q4_2021_2 VALUES LESS THAN(13)
)
);
拆分
sales_range_hash
表分区q1_2021
为q1_2021_1
、q1_2021_2
,及其对应的所有子分区:ALTER TABLE sales_range_hash REORGANIZE PARTITION q1_2021 INTO (
PARTITION q1_2021_1 VALUES LESS THAN (2)(
SUBPARTITION s0_1 ,
SUBPARTITION s1_1
),
PARTITION q1_2021_2 VALUES LESS THAN (4)(
SUBPARTITION s0_2 ,
SUBPARTITION s1_2
)
);
修改3个分区
p0
、p1
、p2
为q1
、q2
:ALTER TABLE sales_list_hash REORGANIZE PARTITION p0,p1,p2 INTO (
PARTITION q1 VALUES in (1,2)(
SUBPARTITION s0,
SUBPARTITION s1
),
PARTITION q2 VALUES in (3,4)(
SUBPARTITION s3,
SUBPARTITION s4
)
);