Todos os produtos
Search
Central de documentação

PolarDB:REORGANIZE PARTITION

Última atualização: Jun 28, 2026

Este tópico descreve como reestruturar partições em uma tabela particionada por lista ou por intervalo usando a cláusula REORGANIZE PARTITION na instrução ALTER TABLE. O sistema redistribui automaticamente os dados para corresponder às novas definições de partição com base na cláusula. Nenhum dado é perdido durante o processo de reestruturação.

Exemplos

Dividir partições

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

Mesclar partições

-- 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
        )
    );
É possível mesclar apenas partições que possuem valores de intervalo contíguos.

Modifique partições

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

Sintaxe

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

  • Crie uma partição de lista.

    PARTITION partition_name VALUES IN (value[, value]...) 
    (subpartition, ...)
  • Crie uma partição de intervalo.

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

subpartition_definitions

  • Crie uma subpartição de lista.

    SUBPARTITION [subpartition_name] VALUES IN (value[, value]...) 
    [TABLESPACE tablespace_name]
  • Crie uma subpartição de intervalo.

    SUBPARTITION [subpartition_name] VALUES LESS THAN (value[, value]...) 
    [TABLESPACE tablespace_name]
  • Crie uma subpartição de hash ou chave.

    SUBPARTITION [subpartition_name ]
    [TABLESPACE tablespace_name]

Parâmetro

Descrição

table_name

Nome da tabela.

partition_names

Lista separada por vírgulas dos nomes das partições existentes que você deseja mesclar ou dividir.

partition_definitions

Lista separada por vírgulas das novas definições de partição.

partition_name

Nome da partição a ser criada.

Nota

Os nomes das partições devem ser exclusivos entre todas as partições e subpartições, além de seguir as convenções de nomenclatura para identificadores de objetos.

subpartition_name

Nome da subpartição a ser criada.

Nota

Os nomes das subpartições devem ser exclusivos entre todas as partições e subpartições, além de seguir as convenções de nomenclatura para identificadores de objetos.

Exemplos

Preparar dados

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

Dividir partições

Divida a partição p2019_2020 nas partições p2019 e 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
    )
);

Mesclar partições

Mescle as partições p2021 e p2022 em uma única partição 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 partições

Modifique as quatro partições p2019, p2020, p2021_2022 e p_future para três partições: p2019, p2020_2021 e 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
    )
);