本文档介绍了如何对表的部分分区、全部分区及其所有的子分区重新组织分区结构,并且不丢失数据的方法。

语法

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_2021p_2021_1p_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_2021q1_2021_1q1_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个分区p0p1p2q1q2
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
        )
);