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 | Fusione particiones Solo se pueden fusionar particiones que tengan valores de rango contiguos. |
Modifique particiones | |
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}
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
)
);