Transporte de datos entre aplicaciones.

Los archivos de valores separados por comas (CSV) son una forma de transferir datos entre aplicaciones. Las bases de datos como MySQL y el software de hojas de cálculo como Excel admiten la importación y exportación a través de CSV, por lo que puede usar archivos CSV para intercambiar datos entre los dos.

Los archivos CSV son texto sin formato, por lo que son naturalmente ligeros y fáciles de exportar desde MySQL.

Desde el servidor de bases de datos

Si tienes acceso al servidor en el que se ejecuta MySQL, puedes exportar una selección con el comando INTO OUTFILE.

SELECT id, column1, column2 FROM table
INTO OUTFILE '/tmp/mysqlfiles/table.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'

Esto generará un archivo CSV para /tmp/mysqlfiles/table.csv, o donde lo hayas configurado. Deberás asegurarte de que el usuario ejecute MySQL (generalmente mysql o root) tiene propiedad y acceso de escritura al directorio.

También deberás asegurarte de que secure_file_priv la configuración permite que MySQL acceda a ese directorio. Esto, por defecto, bloquea el acceso de lectura y escritura de las consultas SQL. Ésto es una buena opción; Si tu código es vulnerable a la inyección de SQL, cualquier atacante potencial solo tendría acceso a MySQL, y no al resto del sistema de archivos.

Puedes incluir en la lista blanca directorios específicos editando su archivo de configuración MySQL (generalmente ubicado en /etc/my.cnf) para incluir:

[mysqld]
secure-file-priv = "/tmp/mysqlfiles"

Lo que permitirá a MySQL leer y escribir en /tmp/mysqlfiles/ (que tendrás que crear con mkdir) Una vez que MySQL pueda exportar archivos, debería poder ejecutar la consulta y generar archivos CSV.

Con el ENCLOSED BY configuración, las comas se escaparán correctamente, por ejemplo:

"3","Escape, this","also, this"

Que puede tomar e importar directamente en cualquier programa de hoja de cálculo u otro software.

Hoja de cálculo de una lista separada por comas.

Ten en cuenta que el archivo CSV exportado no incluye encabezados de columna, pero las columnas estarán en el mismo orden que el SELECT declaración. Además, los valores nulos se exportarán como N, que es el comportamiento esperado, pero si desea cambiar esto, puede modificar la selección ajustando ifnull(field, "") alrededor de sus campos en su SELECT declaración.

Desde la línea de comando MySQL

Si solo tienes acceso de línea de comandos a la instancia de MySQL, y no tienes acceso al servidor en sí (como cuando no lo administras tu mismo, en el caso de Amazon RDS), el problema es un poco más complicado. Si bien puedes usar FIELDS TERMINATED BY ',' en el servidor para generar una lista separada por comas, la CLI de MySQL se separará con pestañas de forma predeterminada.

Simplemente ingresa una consulta desde la línea de comando y canalízala a un archivo:

mysql -u root -e "select * from database;" > output.tsv

Debido a que la salida de MySQL está separada con pestañas, esto se llama un archivo TSV, para «valores separados por pestañas», y puede funcionar en lugar de su archivo CSV en algunos programas, como las importaciones de hojas de cálculo. Pero no es un archivo CSV, y convertirlo a uno es complicado.

Simplemente podrías reemplazar cada pestaña con una coma, lo que funcionaría pero provocaría que fallara si hay comas en los datos de entrada. Si estás completamente seguro al 100% de que no hay comas en tu archivo TSV (consulte con grep), puede reemplazar las pestañas con sed:

sed "s/t/,/g" output.tsv > output.csv

Pero si tienes comas en tus datos, tendrás que usar un mucho mas largo regex:

sed "s/'/'/;s/t/","/g;s/^/"/;s/$/"/;s/n//g" output.tsv > output.csv

Esto escapará correctamente de los campos con comillas, lo que resolverá el problema de la coma.

Nota: el caracter de tabulación t es no estándar. En macOS y BSD, no está disponible, lo que conduce a un desorden de cada «t» minúscula que causa sed para insertar comas erróneas. Para resolver esto, deberás usar un carácter de tabulación literal en lugar de t:

sed "s/  /,/g" output.tsv > output.csv

Si tus datos de entrada contienen pestañas, no tiene suerte y tendrá que generar un archivo CSV tu mismo con un lenguaje de secuencias de comandos.

Hazlo manualmente con un lenguaje de programación real

MySQL (y la mayoría de las bases de datos) están diseñadas para interactuar, por lo que es probable que ya tenga algún tipo de lenguaje de programación conectado a MySQL. La mayoría de los idiomas también pueden escribir en el disco, por lo que puede crear sus propios scripts de salida CSV leyendo los campos de la base de datos directamente, escapándolos correctamente y escribiendo un archivo delimitado por comas.

Un ejemplo en Python.

También te puede interesar: