Reorganizar y Gestionar Particiones
En este paso, aprenderemos cómo modificar la estructura de partición de una tabla existente utilizando la sentencia ALTER TABLE. Esto es útil para adaptar su esquema de particionamiento a medida que sus datos crecen o sus necesidades cambian.
Recordatorio: Debería seguir en el shell de MySQL y utilizando la base de datos sales_data. Si no es así, use:
USE sales_data;
Supongamos que queremos agregar una nueva partición para el año 2024. Actualmente, los datos de 2024 en adelante se encuentran en la partición pFuture. No puede agregar una nueva partición con ADD PARTITION porque la partición pFuture está definida con VALUES LESS THAN MAXVALUE, que siempre debe ser la última partición.
En su lugar, necesitamos REORGANIZE (reorganizar) la partición pFuture para dividirla. Dividiremos pFuture en dos nuevas particiones: una para el año 2024 (p2024) y una nueva partición pFuture para todo lo posterior a esa fecha.
ALTER TABLE sales REORGANIZE PARTITION pFuture INTO (
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION pFuture VALUES LESS THAN MAXVALUE
);
Este comando toma la partición pFuture existente, mueve cualquier dato de 2024 a la nueva partición p2024 y redefine pFuture para cubrir las fechas a partir de 2025. La fila con sale_date '2024-01-01' se moverá a p2024.
Verifiquemos la estructura de partición actualizada y los recuentos de filas:
SELECT
PARTITION_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';
Debería ver la nueva partición p2024. La fila de 2024 ahora está en p2024.
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p2020 | 0 |
| p2021 | 2 |
| p2022 | 2 |
| p2023 | 2 |
| p2024 | 0 |
| pFuture | 0 |
+----------------+------------+
Ahora, demostremos la fusión de particiones. Supongamos que queremos combinar las particiones p2020 y p2021 en una sola partición llamada p2020_2021.
ALTER TABLE sales REORGANIZE PARTITION p2020, p2021 INTO (
PARTITION p2020_2021 VALUES LESS THAN (2022)
);
Este comando fusiona los datos de p2020 y p2021 en una nueva partición llamada p2020_2021. La cláusula VALUES LESS THAN (2022) define el nuevo límite para esta partición fusionada.
Verifique la estructura de partición nuevamente:
SELECT
PARTITION_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';
Verá que p2020 y p2021 ya no existen, y p2020_2021 aparece con el recuento de filas combinado.
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p2020_2021 | 3 |
| p2022 | 2 |
| p2023 | 2 |
| p2024 | 0 |
| pFuture | 0 |
+----------------+------------+
Finalmente, eliminemos una partición. Podemos eliminar la partición p2024. Tenga en cuenta que esto también eliminará todos los datos dentro de esa partición.
ALTER TABLE sales DROP PARTITION p2024;
Verifique la estructura de partición una última vez:
SELECT
PARTITION_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';
La partición p2024 ya no debería aparecer en la lista.
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p2020_2021 | 3 |
| p2022 | 2 |
| p2023 | 2 |
| pFuture | 0 |
+----------------+------------+
Ha reorganizado, fusionado y eliminado particiones con éxito utilizando ALTER TABLE. Esto demuestra la flexibilidad de gestionar tablas particionadas a medida que evolucionan sus datos.