Thread SQL-DB-Dump lesen und konverieren (18 answers)
Opened by topeg at 2014-03-14 02:28

topeg
 2014-03-14 02:28
#174096 #174096
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich stand vor kurzem vor dem Problem einen ~800Mb großen SQL Dump nach bestimmten Daten zu durchsuchen. Eine Möglichkeit wäre es natürlich gewesen ihn in eine DB einzuspielen. Aber ich war mir nicht sicher ob der SQL-Dump :
1. vollständig und Syntaktisch korrekt war,
2. in ihm nicht irgend etwas schlimmes stand und
3. Ob das auch Rechtlich OK gewesen wäre.

So setze ich mich daran um einen sehr einfachen SQL Parser zu schreiben, der mir die CREATE und INSERT Statements lesen konnte.

Anhang also mein Ergebnis. Anders als meine persönliche Version (Ich habe nach zwei speziellen Tabellen gefiltert) erzeugt diese für jede im SQL-Dump vorhandene Tabelle eine CSV mit den Daten. Es wird für jede Tabelle ein CREATE und INSERT Statements erwartet. Die Daten sind so formatiert das CPAN:Text::CSV sie lesen kann. Sie sind nicht zwangsläufig menschenlesbar formatiert.

Das Scipt besteht aus zwei Teilen. Einem Modul welches das Parsen übernimmt und einem kleinen Frontend, das Die geparsten Daten als CSV ablegt.

Zu beachten ist, das der Parser Rudimentär ist. Er kann die reine Synatx parsen. Er kann also Klammern, Kommata, Strings, Kommentare sowie Schlüsselworte Finden, Zuordnen und Gruppieren. Er hat aber keinerlei weitergehende Funktionalitäten. Die erzeugten Strukturen werden nicht bewertet und weiterreichende Zugehörigkeiten werden nicht erzeugt. (z.B bei Befehlen, die aus zwei Worten bestehen)
Nur INSERT und CREATE sind als "Befehle" gekennzeichnet. Das war alles was ich brauchte.

Der Parser arbeitet nicht rekursiv, da ich dabei in "Deep Rekursion" Warnungen gelaufen bin. Ist eine SQL-Zeile gelesen worden, so werden die vorher definierten Handler ausgeführt und der Datensatz and die Funktionen übergeben.

Das ganze steht unter einer nimm es oder lass es sein Lizenz. Ich übernehme keine Verantwortung, wenn jemand damit etwas kaputt macht.
Anhänge
text/plain
281 lines
sqldump_to_csv.pl

View full thread SQL-DB-Dump lesen und konverieren