Hintergrund
Ein schnell zusammengehacktes Python-Skript, um mysqldump-Dateien in CSV-Dateien zu verwandeln. Optimiert für Wikipedia-Datenbank-Dumps.
Außerordentlich große MySQL-Dumps können auf relativ begrenzter Hardware schwierig oder unmöglich zu importieren sein. Das Ärgerliche an einem MySQL-Dump ist, dass der einzige praktische Weg, ihn zu bearbeiten, über MySQL führt, was im Wesentlichen ein Hardware-Upgrade erfordert, wenn man mit großen Dumps wie den Wikipedia-MySQL-Dumps arbeiten will.
Wäre es nicht toll, wenn es eine Möglichkeit gäbe, das MySQL-Dump-Format (das eine Reihe von INSERT-Anweisungen ist) in ein universelles Format zu konvertieren… wie… CSV?
Jetzt gibt es eine Möglichkeit.
Dieses kurze Python-Skript macht sich die Tatsache zunutze, dass sich die Struktur einer MySQL-INSERT-Anweisung nicht allzu sehr von der einer CSV-Datei unterscheidet, und verwendet den Python-CSV-Parser (vor und nach einigen Textverarbeitungen), um die MySQL-Dump-Datei in eine CSV-Datei umzuwandeln.
Verwendung
Führen Sie einfach python mysqldump_to_csv.py
gefolgt von dem Dateinamen einer SQL-Datei aus. Sie können mehrere SQL-Dateien angeben, die dann alle in einer CSV-Datei zusammengefügt werden. Dieses Skript kann auch SQL-Dateien von der Standardeingabe entgegennehmen, was nützlich sein kann, um einen gezipten MySQL-Dump in eine CSV-Datei zu verwandeln, ohne den MySQL-Dump zu dekomprimieren.
zcat dumpfile.sql.gz | python mysqldump_to_csv.py
Wie es funktioniert
Das folgende 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);
wird in die folgende CSV-Datei umgewandelt:
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
Es ist nicht allzu schwer zu erkennen, was vor sich geht, aber Sie können sich natürlich den Quellcode ansehen, um genau zu sehen, wie die Umwandlung vorgenommen wird.
Todo
- Eine strenge Reihe von Unit-Tests, die beweisen, dass dies bei einer Reihe von MySQL-Dump-Dateien ohne Nebeneffekte funktioniert
- Mehr Dokumentation
- Eine Lösung für einen Fehler, bei dem eine Spalte eine Zeichenkette ist, die mit
)
endet und die nächste Spalte eine Zeichenkette ist, die mit(
beginnt. Die derzeitige Programmlogik legt nahe, dass die Klammern entfernt werden.
Schreibe einen Kommentar