Antecedentes

Un script Python rápidamente hackeado para convertir archivos mysqldump en archivos CSV. Optimizado para los volcados de bases de datos de Wikipedia.

Los volcados de MySQL extraordinariamente grandes pueden ser difíciles o imposibles de importar en un hardware bastante limitado. Lo molesto de un volcado de MySQL es que la única manera práctica de manipularlo es a través de MySQL, que esencialmente requiere una actualización de hardware si uno quiere trabajar con grandes volcados como los volcados de MySQL de Wikipedia.

¿No sería genial si hubiera alguna manera de convertir el formato de volcado de MySQL (que es una serie de sentencias INSERT) en un formato universal… como… CSV?

Bueno, ahora lo hay.

Este corto script de Python se aprovecha del hecho de que la estructura de una sentencia INSERT de MySQL no es muy diferente de la de CSV, y utiliza el analizador CSV de Python (antes y después de algunos arreglos de texto) para convertir el archivo de volcado de MySQL en un archivo CSV.

Uso

Sólo hay que ejecutar python mysqldump_to_csv.py seguido del nombre de un archivo SQL. Puede especificar varios archivos SQL, y todos ellos se concatenarán en un archivo CSV. Este script también puede recibir archivos SQL desde la entrada estándar, lo que puede ser útil para convertir un volcado de MySQL comprimido en un archivo CSV sin descomprimir el volcado de MySQL.

zcat dumpfile.sql.gz | python mysqldump_to_csv.py

Cómo funciona

El siguiente SQL:

INSERT INTO `page` VALUES (1,0,'April','',1,0,0,0.778582929065,'20140312223924','20140312223929',4657771,20236,0),(2,0,'August','',0,0,0,0.123830928525,'20140312221818','20140312221822',4360163,11466,0);

se convierte en el siguiente CSV:

1,0,April,1,0,0,0.778582929065,20140312223924,20140312223929,4657771,20236,02,0,August,0,0,0,0.123830928525,20140312221818,20140312221822,4360163,11466,0

No es demasiado difícil ver lo que está pasando, pero sin duda puede mirar el código fuente para ver exactamente cómo se hace la transformación.

Todo

  • Una serie rigurosa de pruebas unitarias, demostrando que esto funciona en un conjunto diverso de archivos de volcado de MySQL sin ningún efecto secundario
  • Algo más de documentación
  • Una solución a un error en el que una columna es una cadena que termina en ) y la siguiente columna es una cadena que comienza en (. La lógica actual del programa sugiere que los paréntesis serían despojados.