Todos los productos
Search
Centro de documentos

PolarDB:REORGANIZE PARTITION

Última actualización: Sep 05, 2026

Este tema describe cómo reestructurar particiones en una tabla particionada por lista o por rango mediante la cláusula REORGANIZE PARTITION de la instrucción ALTER TABLE. El sistema redistribuye automáticamente los datos para que coincidan con las nuevas definiciones de partición, de acuerdo con la cláusula. No se pierden datos durante el proceso de reestructuración.

Ejemplos

Divida particiones

-- Split the existing partition p2019_2020 into two new partitions 2019 and 2020.
ALTER TABLE sales_data
REORGANIZE PARTITION p2019_2020 INTO (
    PARTITION p2019 VALUES LESS THAN (2020) (
        SUBPARTITION s2019_q1,
        SUBPARTITION s2019_q2,
        SUBPARTITION s2019_q3,
        SUBPARTITION s2019_q4
    ),
    PARTITION p2020 VALUES LESS THAN (2021) (
        SUBPARTITION s2020_q1,
        SUBPARTITION s2020_q2,
        SUBPARTITION s2020_q3,
        SUBPARTITION s2020_q4
    )
);

Fusione particiones

-- Merge partitions p2021 and p2022.
    ALTER TABLE sales_data
    REORGANIZE PARTITION p2021, p2022 INTO (
        PARTITION p2021_2022 VALUES LESS THAN (2023) (
            SUBPARTITION s2021_2022_q1,
            SUBPARTITION s2021_2022_q2,
            SUBPARTITION s2021_2022_q3,
            SUBPARTITION s2021_2022_q4
        )
    );
Solo se pueden fusionar particiones que tengan valores de rango contiguos.

Modifique particiones

-- Reorganize existing partitions into four new partitions based on quarterly ranges.
ALTER TABLE logs
REORGANIZE PARTITION p0, p1 INTO (
    PARTITION q1 VALUES LESS THAN (TO_DAYS('2023-04-01')),
    PARTITION q2 VALUES LESS THAN (TO_DAYS('2023-07-01')),
    PARTITION q3 VALUES LESS THAN (TO_DAYS('2023-10-01')),
    PARTITION q4 VALUES LESS THAN (TO_DAYS('2024-01-01'))
);

Sintaxis

ALTER TABLE table_name
    REORGANIZE PARTITION partition_names INTO (partition_definitions)

partition_definitions: {list_partition | range_partition}

subpartition_definition: {list_subpartition | range_subpartition | hash_subpartition | key_subpartition}

partition_definitions

  • Defina una partición por lista.

    PARTITION partition_name VALUES IN (value[, value]...) 
    (subpartition, ...)
  • Defina una partición por rango.

    PARTITION partition_name VALUES LESS THAN (value[, value]...) 
    (subpartition, ...)

subpartition_definitions

  • Defina una subpartición por lista.

    SUBPARTITION [subpartition_name] VALUES IN (value[, value]...) 
    [TABLESPACE tablespace_name]
  • Defina una subpartición por rango.

    SUBPARTITION [subpartition_name] VALUES LESS THAN (value[, value]...) 
    [TABLESPACE tablespace_name]
  • Defina una subpartición por hash o por clave.

    SUBPARTITION [subpartition_name ]
    [TABLESPACE tablespace_name]

Parámetro

Descripción

table_name

El nombre de la tabla.

partition_names

Una lista separada por comas de los nombres de las particiones existentes que desea fusionar o dividir.

partition_definitions

Una lista separada por comas de las nuevas definiciones de partición.

partition_name

El nombre de la partición que cree.

Nota

Los nombres de partición deben ser únicos entre todas las particiones y subparticiones, y deben seguir las convenciones de nomenclatura de los identificadores de objetos.

subpartition_name

El nombre de la subpartición que cree.

Nota

Los nombres de subpartición deben ser únicos entre todas las particiones y subparticiones, y deben seguir las convenciones de nomenclatura de los identificadores de objetos.

Ejemplos

Prepare los datos

--Create a sales table that is range-partitioned by year and further hash-subpartitioned by quarter. 
CREATE TABLE sales_data (
    order_id INT AUTO_INCREMENT,
    order_date DATE NOT NULL,
    amount DECIMAL(10,2),
    PRIMARY KEY (order_id, order_date)  -- The primary key must include the partition key.
)
PARTITION BY RANGE (YEAR(order_date))
SUBPARTITION BY HASH( QUARTER(order_date) )
SUBPARTITIONS 4 (  -- By default, each parent partition has four subpartitions.
    PARTITION p2019_2020 VALUES LESS THAN (2021),
    PARTITION p2021 VALUES LESS THAN (2022),
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p_future VALUES LESS THAN MAXVALUE
);

-- Insert test data.
INSERT INTO sales_data (order_date, amount) VALUES
('2020-03-15', 100.00),  -- p2019_2020
('2021-06-20', 200.00),  -- p2021
('2022-09-10', 300.00),  -- p2022
('2023-12-25', 400.00);  -- p_future

Divida particiones

Divida la partición p2019_2020 en las particiones p2019 y p2020.

ALTER TABLE sales_data
REORGANIZE PARTITION p2019_2020 INTO (
    PARTITION p2019 VALUES LESS THAN (2020) (
        SUBPARTITION s2019_q1,
        SUBPARTITION s2019_q2,
        SUBPARTITION s2019_q3,
        SUBPARTITION s2019_q4
    ),
    PARTITION p2020 VALUES LESS THAN (2021) (
        SUBPARTITION s2020_q1,
        SUBPARTITION s2020_q2,
        SUBPARTITION s2020_q3,
        SUBPARTITION s2020_q4
    )
);

Fusione particiones

Fusione las particiones p2021 y p2022 en una única partición p2021_2022.

ALTER TABLE sales_data
REORGANIZE PARTITION p2021, p2022 INTO (
    PARTITION p2021_2022 VALUES LESS THAN (2023) (
        SUBPARTITION s2021_2022_q1,
        SUBPARTITION s2021_2022_q2,
        SUBPARTITION s2021_2022_q3,
        SUBPARTITION s2021_2022_q4
    )
);

Modifique particiones

Modifique las cuatro particiones p2019, p2020, p2021_2022 y p_future para convertirlas en tres particiones: p2019, p2020_2021 y p2022_future.

ALTER TABLE sales_data
REORGANIZE PARTITION p2019, p2020, p2021_2022, p_future INTO (
    PARTITION p2019 VALUES LESS THAN (2020) (
        SUBPARTITION s2019_q1,
        SUBPARTITION s2019_q2,
        SUBPARTITION s2019_q3,
        SUBPARTITION s2019_q4
    ),
    PARTITION p2020_2021 VALUES LESS THAN (2022) (
        SUBPARTITION s2020_2021_q1,
        SUBPARTITION s2020_2021_q2,
        SUBPARTITION s2020_2021_q3,
        SUBPARTITION s2020_2021_q4
    ),
    PARTITION p2022_future VALUES LESS THAN MAXVALUE (
        SUBPARTITION s2022_future_1,
        SUBPARTITION s2022_future_2,
        SUBPARTITION s2022_future_3,
        SUBPARTITION s2022_future_4
    )
);