Anuncios

Bienvenidos sean a este post, hoy hablaremos de metodos para copiar datos entre particiones y tablas.

Anuncios
Anuncios

Si bien los metodos que mencionaremos trabajan perfectamente para todos los tipos estan optimizados para HASH y KEY, la razon es simple porque cuando usamos estos tipos los conjuntos logicos de filas son distribuidas sobre todas las particiones, sin embargo RANGE y LIST nos permiten dividir los datos en grupos que son asignados a una particion en particular basado en uno o mas valores, esto hace que la expresion de particionamiento sea simple aunque tambien es por razones de performance, esto permite que se pueda encontrar de forma sencilla cual particion o grupo de particiones almacena el conjunto de filas.

Anuncios
Anuncios

Mariadb 10.0 soporta una opcion de ALTER TABLE que nos permite intercambiar los datos almacenados en una particion con los datos almacenados en una tabla no particionada, pero recuerden que la copia es bidireccional por lo tanto si queremos copiar el contenido de una tabla a una particion debemos usar TRUNCATE en la particion primero, para el caso contrario se debe usar el TRUNCATE en la tabla, en cualquiera de los casos los datos del contenedor son vaciados, antes de comenzar a trabajar vamos a crear una tabla con particionamiento RANGE en una base que puedan, si vienen de los posts anteriores les recomiendo borrarla y volverla a crear:

MariaDB [base1]> create table articulos (
    -> id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    -> fecha DATE NOT NULL,
    -> autor VARCHAR(100),
    -> idioma TINYINT UNSIGNED,
    -> texto TEXT,
    -> PRIMARY KEY(id, fecha))
    -> engine = InnoDB
    -> partition by range(YEAR(fecha)) (
    -> partition p0 values less than (1990),
    -> partition p1 values less than (2000),
    -> partition p2 values less than (2010),
    -> partition p3 values less than (2020),
    -> partition actual values less than (2030));
Anuncios

En este caso creamos una tabla simple para almacenar informacion de articulos la cual esta particionada con el tipo RANGE, tal como vimos en este post, nuestro siguiente paso sera crear una nueva tabla que poseera los ultimos articulos por lo tanto debera ser identica a esta tabla pero no debera estar particionada, para ello primero crearemos la tabla de la siguiente forma:

MariaDB [base1]> create table articulos_recientes like articulos;
Anuncios

De esta forma ya tenemos una nueva tabla igual a la original, nuestro siguiente paso sera eliminar todas las particiones:

MariaDB [base1]> alter table articulos_recientes remove partitioning;
Anuncios

Como vimos en este post esta instruccion solo removera las particiones pero mantendra toda la informacion de las mismas en la tabla, pasemos ahora a copiar la informacion de la particion actual de la tabla articulos a la tabla que creamos recientemente mediante la siguiente instruccion:

MariaDB [base1]> alter table articulos
    -> exchange partition actual
    -> with table articulos_recientes;
Anuncios

Como dijimos esta informacion se copiara de la particion informada a la nueva tabla pero dejara a la particion vacia, ahora si no queremos dejar a la particion vacia o simplemente la version de mariadb es anterior a la 10.0 tambien podemos usar a las instrucciones SELECT … INSERT o CREATE TABLE … SELECT, inclusive para versiones viejas debemos usar a tablas temporales.

Anuncios

Con versiones 10.0 de mariadb se puede copiar informacion con una extension particular de SELECT que solo devuelve datos de una particion especificada, veamos un ejemplo:

MariaDB [test]> CREATE OR REPLACE TABLE articulos_recientes
    -> SELECT * FROM articulos PARTITION (actual);
Anuncios

La extension que mencionamos es PARTITION donde podemos informar cual es la particion a la cual le vamos a hacer un query, toda esta informacion sera asignada a la nueva tabla, copiando la informacion y manteniendo la original, por esta extension no se preocupen porque hablaremos de ella mas a fondo en otro post.

Anuncios

En resumen, hoy hemos visto como copiar informacion de una particion a una tabla, y en vicerversa tambien, las instrucciones para copiar la informacion, tambien una alternativa para este procedimiento, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario