Sfondo

Uno script Python di rapida realizzazione per trasformare i file mysqldump in file CSV. Ottimizzato per i dump di database di Wikipedia.

I dump MySQL straordinariamente grandi possono essere difficili o impossibili da importare su un hardware abbastanza limitato. La cosa fastidiosa di un dump MySQL è che l’unico modo pratico per manipolarlo è attraverso MySQL, che essenzialmente richiede un aggiornamento dell’hardware se si vuole lavorare con grandi dump come i dump MySQL di Wikipedia.

Non sarebbe bello se ci fosse un modo per convertire il formato di dump MySQL (che è una serie di istruzioni INSERT) in un formato universale… come… CSV?

Beh, ora c’è.

Questo breve script Python sfrutta il fatto che la struttura di un’istruzione INSERT di MySQL non è troppo diversa dal CSV, e usa il parser CSV di Python (prima e dopo qualche manipolazione del testo) per trasformare il file dump di MySQL in un file CSV.

Uso

Basta eseguire python mysqldump_to_csv.py seguito dal nome di un file SQL. Puoi specificare più file SQL, e saranno tutti concatenati in un file CSV. Questo script può anche prendere file SQL da input standard, il che può essere utile per trasformare un dump MySQL gzippato in un file CSV senza decomprimere il dump MySQL.

zcat dumpfile.sql.gz | python mysqldump_to_csv.py

Come funziona

Il seguente 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);

viene trasformato nel seguente 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

Non è troppo difficile vedere cosa sta succedendo, ma si può certamente guardare il codice sorgente per vedere esattamente come avviene la trasformazione.

Todo

  • Una serie rigorosa di test unitari, dimostrando che questo funziona su una serie diversificata di file di dump MySQL senza alcun effetto collaterale
  • Altra documentazione
  • Una soluzione a un bug in cui una colonna è una stringa che finisce in ) e la colonna successiva è una stringa che inizia in (. La logica attuale del programma suggerisce che le parentesi sarebbero state rimosse.