REORGANIZE PARTITION

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

语法

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表分区p0p0_1p0_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表分区p1p1_1p1_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个分区p0p1p2q1q2q3

    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
            )
    );