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,0Es 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