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