2009-04-07 20 views
5

Sto lavorando con un file XML da 20 giga che vorrei importare in un database SQL (preferibilmente MySQL, poiché è ciò che conosco). Sembra che sarebbe un compito comune, ma dopo aver cercato su Google un po 'non sono stato in grado di capire come farlo. Qual è il modo migliore per farlo?Importazione XML nel database SQL

So che questa capacità è incorporata in MySQL 6.0, ma non è un'opzione in questo momento perché si tratta di una versione di sviluppo alpha.

Inoltre, se devo fare uno script preferisco usare Python perché è quello che mi è più familiare.

Grazie.

risposta

1

Ho fatto questo più volte con Python, ma mai con un file XML così grande. ElementTree è un'eccellente libreria XML per Python che potrebbe essere di aiuto. Se fosse possibile, divideremo l'XML in file più piccoli per rendere più facile il caricamento in memoria e l'analisi.

+1

SAX Parser è utile per suddividere un grande file XML in pezzi. –

4

È possibile utilizzare la funzione getiterator() per scorrere il file XML senza analizzare l'intera operazione in una sola volta. È possibile farlo con ElementTree, che è incluso nella libreria standard o con lxml.

0

Può essere un compito comune, ma forse 20 GB non è così comune con MySQL come con SQL Server.

Ho fatto questo utilizzando SQL Server Integration Services e un po 'di codice personalizzato. Se è necessario uno di questi dipende da ciò che è necessario fare con 20 GB di XML in un database. Sarà una singola colonna di una singola riga di un tavolo? Una riga per elemento figlio?

SQL Server ha un tipo di dati XML se si desidera semplicemente archiviare l'XML come XML. Questo tipo consente di eseguire query utilizzando XQuery, consente di creare indici XML su XML e consente alla colonna XML di essere "fortemente tipizzata" facendo riferimento a un insieme di schemi XML, che vengono archiviati nel database.

+0

Mi piacerebbe davvero eliminare l'XML e archiviare semplicemente i dati come colonne con nome appropriato. È un formato piuttosto semplice (documenti da un sito di contenuto pubblico con un'API di download). –

2

Date un'occhiata alla funzione iterparse() da ElementTree o cElementTree (immagino cElementTree sarebbe meglio se lo si può utilizzare)

Questo pezzo descrive più o meno quello che devi fare: http://effbot.org/zone/element-iterparse.htm#incremental-parsing

Questo sarà probabilmente il modo più efficiente per farlo in Python. Assicurarsi di non dimenticare di chiamare .clear() sugli elementi appropriati (è in realtà non si desidera creare un albero di memoria di un file xml 20gig: il metodo .getiterator() descritto in un'altra risposta è leggermente più semplice, ma richiede in primo luogo l'intero albero - presumo che il poster avesse effettivamente anche iterparse()

Problemi correlati