Generar un archivo CSV desde Mysql usando el Storage Engine CSV

¿Deseas exportar una tabla a CSV o una consulta o una vista?. Este artículo puede ser de mucha ayuda.

Una de las tantas características que hacen de Mysql un motor de base de datos atractivo es su soporte a múltiples motores de almacenamiento o Storage Engines. Estos Engines, así me referiré en adelante a los motores de almacenamiento, permiten tratar a las tablas desde diferentes enfoques que pueden ser o no transaccionales. Si deseas conocer más acerca de los Engines soportados por Mysql puedes visitar el siguiente enlace.

La finalidad de este artículo es mostrar como podemos aprovechar el Engine csv de Mysql para generar archivos CSV de manera muy rápida y eficiente..

** Importante: Auque para el artículo he usado Mysql 5.6,  este Engine se encuentra disponible desde versiones previas por lo que este artículo es aplicable a cualquier versión de Mysql que lo tenga soportado.

Para comenzar revisaremos si el Engine se encuentra habilitado en nuestro servidor y para ello ejecutaremos la siguiente sentencia:

SHOW ENGINES;

El resultado obtenido será el siguiente

ShowEngines

Como pueden observar, Mysql lista los motores de almacenamiento y si están o no soportados. En próximas entradas trataré sobre el uso de los menos conocidos.

Una vez que hemos verificado que nuestro servidor tiene habilitado el Engine,  podremos entonces elegir la tabla o consulta desde la que crearemos el CSV.  Para este artículo he seleccionado la tabla payment que se encuentra en la base de datos demo sakila. Esta base de datos está incluida en la instalación de Mysql 5.6.

¿Recuerdan el artículo Mysql – Crear una Tabla a Partir de un Select?, Pues como indiqué allí, la creación de tablas a partir de consultas es muy sencillo permitiéndonos además establecer el Engine con que será creada la tabla. Con esto en mente armaremos la siguiente sentencia en Mysql

Create Table rental_csv engine CSV  
   SELECT rental_id, rental_date, inventory_id, customer_id, staff_id, last_update 
    FROM sakila.rental;

 

Como se puede observar, la consulta establece la creación de una tabla rental_csv usando el Engine CSV y es aquí donde reside la belleza de esta característica de Mysq. Pues con esta sencilla sentencia SQL podremos generar un Archivo CSV como podemos ver en la siguiente imagen:

generatecsv

Después de ejecutar la sentencia Mysql nos informará del resultado de la operación y como podemos observar en la imagen, se creó un archivo CSV conteniendo 16,044 filas de 6 columnas en 0.390 segundos. Un tiempo nada despreciable.

Ahora la pregunta obligada, ¿Dónde se ha creado nuestro archivo CSV?, bueno Mysql creará el archivo dentro de su directorio de datos y aquí es importante mencionar que aún cuando Mysql lo crea y permite realizar operaciones en él, no lo toma de manera exclusiva por lo que es posible moverlo de esta ubicación a una más accesible.

filecsvgenerated 

Y aquí una vista del contenido del archivo generado:

filecsvcontent

 

Como podemos observar, la generación de contenido CSV desde Mysql puede resultar no solo sencilla sino además proporcionar tiempos de respuesta nada despreciables.

***Desventajas

Claro, no todo lo que brilla es oro y en este caso resulta que existen dos desventajas importantes que podrían desmotivar su uso. La primera tiene que ver con los nulos. Mysql exige que para usar el Engine CSV la tabla no contenga nulos, claro que esta restricción puede saltarse pero tendrá que ser a coste de agregarle complejidad a la consulta. Otra desventaja es que Mysql creará el archivo CSV dentro de su directorio de datos y bueno, esto puede también librarse haciendo uso de un script solo que la solución le agregará un poco de complejidad al proceso.

Este Engine  puede ser o no de ayuda para sus procesos de exportación de datos , claro que eso dependerá siempre de las necesidades individuales de cada situación.

 

1 Trackback / Pingback

  1. MYSQL – Importar un archivo CSV con LOAD DATA INFILE | Blog del Poli

Deja un comentario