本文档介绍了如何对表的部分分区、全部分区及其所有的子分区重新组织分区结构,并且不丢失数据的方法。
语法
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
表分区p0
为p0_1
、p0_2
,及其对应的所有子分区:ALTER TABLE sales_range_range REORGANIZE PARTITION p0 INTO ( PARTITION p0_1 VALUES LESS THAN (500)( SUBPARTITION q1_2021_1 VALUES LESS THAN(200), SUBPARTITION q2_2021_1 VALUES LESS THAN(300), SUBPARTITION q3_2021_1 VALUES LESS THAN(400), SUBPARTITION q4_2021_1 VALUES LESS THAN(500) ), PARTITION p0_2 VALUES LESS THAN (1000)( SUBPARTITION q1_2021_2 VALUES LESS THAN(600), SUBPARTITION q2_2021_2 VALUES LESS THAN(700), SUBPARTITION q3_2021_2 VALUES LESS THAN(800), SUBPARTITION q4_2021_2 VALUES LESS THAN(1000) ) );
拆分
sales_range_hash
表分区p1为p1_1
、p1_2
,及其对应的所有子分区:ALTER TABLE sales_range_hash REORGANIZE PARTITION p1 INTO ( PARTITION p1_1 VALUES LESS THAN ('2022-12-01')( SUBPARTITION s0_1 VALUES LESS THAN ('2022-12-05'), SUBPARTITION s1_1 VALUES LESS THAN ('2022-12-10'), SUBPARTITION s2_1 VALUES LESS THAN ('2022-12-15') ), PARTITION p1_2 VALUES LESS THAN ('2023-01-01')( SUBPARTITION s0_2 VALUES LESS THAN ('2022-12-20'), SUBPARTITION s1_2 VALUES LESS THAN ('2022-12-25'), SUBPARTITION s2_2 VALUES LESS THAN ('2022-12-30') ) );
修改3个分区
p0
、p1
、p2
为q1
、q2
和q3
: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 ), PARTITION q3 VALUES in (5,6)( SUBPARTITION s5, SUBPARTITION s6 ) );