2009-04-07 8 views
5

Ich arbeite mit einer XML-Datei mit 20 Gigs, die ich in eine SQL-Datenbank importieren möchte (vorzugsweise MySQL, da ich damit vertraut bin). Dies scheint eine häufige Aufgabe zu sein, aber nachdem ich ein bisschen gegoogelt habe, war ich nicht in der Lage, herauszufinden, wie es geht. Was ist der beste Weg, dies zu tun?XML in SQL-Datenbank importieren

Ich weiß, dass diese Fähigkeit in MySQL 6.0 integriert ist, aber das ist jetzt keine Option, weil es eine Alpha-Entwicklungsversion ist.

Auch, wenn ich irgendwelche Skripte machen sollte, würde ich lieber Python verwenden, weil mir das am besten vertraut ist.

Danke.

Antwort

1

Ich habe das schon mehrmals mit Python gemacht, aber nie mit einer so großen XML-Datei. ElementTree ist eine ausgezeichnete XML-Bibliothek für Python, die hilfreich wäre. Wenn es möglich wäre, würde ich das XML in kleinere Dateien aufteilen, um es einfacher zu machen, in den Speicher zu laden und zu parsen.

+1

SAX-Parser ist hilfreich, um eine große XML-Datei in Stücke zu zerlegen. –

4

Sie können die Funktion getiterator() verwenden, um die XML-Datei zu durchlaufen, ohne das gesamte Objekt auf einmal zu analysieren. Sie können dies mit ElementTree, die in der Standardbibliothek enthalten ist, oder mit lxml tun.

0

Es kann eine allgemeine Aufgabe sein, aber vielleicht 20 GB ist nicht so häufig mit MySQL wie mit SQL Server.

Ich habe dies mit SQL Server Integration Services und ein wenig benutzerdefinierten Code getan. Ob Sie beide benötigen, hängt davon ab, was Sie mit 20 GB XML in einer Datenbank tun müssen. Wird es eine einzelne Spalte einer einzelnen Zeile einer Tabelle sein? Eine Zeile pro Kindelement?

SQL Server hat einen XML-Datentyp, wenn Sie das XML einfach als XML speichern möchten. Mit diesem Typ können Sie Abfragen mit XQuery durchführen, XML-Indizes über XML erstellen und die XML-Spalte "stark typisieren", indem Sie sie auf eine Reihe von XML-Schemas verweisen, die Sie in der Datenbank speichern.

+0

Ich möchte wirklich das XML loswerden und nur die Daten als entsprechend benannte Spalten speichern. Es ist ein ziemlich einfaches Format (Dokumente von einer öffentlichen Inhaltsseite mit einer Download-API). –

2

Werfen Sie einen Blick auf die iterparse() Funktion von ElementTree oder cElementTree (denke ich celementtree wäre am besten, wenn Sie es verwenden können)

Dieses Stück mehr oder weniger beschrieben, was Sie tun müssen: http://effbot.org/zone/element-iterparse.htm#incremental-parsing

Diese wird wahrscheinlich der effizienteste Weg sein, dies in Python zu tun. Stellen Sie sicher, nicht zu vergessen, .clear() auf die entsprechenden Elemente (Sie wirklich wirklich wollen nicht in einer Baumstruktur einer 20gig XML-Datei erstellen: .getiterator() Methode in einer anderen Antwort beschrieben ist etwas einfacher, aber tut erfordern die ganze Baum zuerst - ich gehe davon aus, dass das Plakat hatte tatsächlich iterparse() im Auge als auch)

0

die MySQL documentation nicht, dass XML-Import, um anzuzeigen, scheint beschränkt sich auf Version 6. Es funktioniert offenbar mit 5 auch.

Verwandte Themen