2009-04-07 83 views
5

Estoy trabajando con un archivo XML de 20 gigas que me gustaría importar a una base de datos SQL (preferiblemente MySQL, ya que eso es con lo que estoy familiarizado). Parece que sería una tarea común, pero después de buscar en Google un poco no he podido encontrar la manera de hacerlo. ¿Cuál es la mejor manera de hacer esto?Importar XML a la base de datos SQL

Sé que esta capacidad está integrada en MySQL 6.0, pero que no es una opción en este momento porque es una versión de desarrollo alfa.

Además, si tengo que hacer alguna secuencia de comandos, preferiría usar Python porque eso es con lo que estoy más familiarizado.

Gracias.

Respuesta

1

He hecho esto varias veces con Python, pero nunca con un archivo XML tan grande. ElementTree es una excelente biblioteca XML para Python que podría ser de ayuda. Si fuera posible, dividiría el XML en archivos más pequeños para que sea más fácil cargar en la memoria y analizar.

+1

SAX Parser es útil para dividir un gran archivo XML en pedazos. –

4

Puede usar la función getiterator() para iterar sobre el archivo XML sin analizar todo al mismo tiempo. Puede hacerlo con ElementTree, que se incluye en la biblioteca estándar, o con lxml.

for record in root.getiterator('record'): 
    add_element_to_database(record) # Depends on your database interface. 
            # I recommend SQLAlchemy. 
0

Puede ser una tarea común, pero tal vez 20 GB no es tan común con MySQL como con SQL Server.

He hecho esto usando SQL Server Integration Services y un poco de código personalizado. Si necesita cualquiera de ellos depende de lo que necesita hacer con 20 GB de XML en una base de datos. ¿Va a ser una sola columna de una sola fila de una tabla? Una fila por elemento hijo?

SQL Server tiene un tipo de datos XML si simplemente desea almacenar el XML como XML. Este tipo le permite hacer consultas usando XQuery, le permite crear índices XML sobre el XML y permite que la columna XML sea "fuertemente tipada" refiriéndola a un conjunto de esquemas XML, que almacena en la base de datos.

+0

Realmente me gustaría deshacerme del XML y simplemente almacenar los datos como columnas apropiadamente nombradas. Es un formato bastante simple (documentos de un sitio de contenido público con API de descarga). –

2

Tome un vistazo a la función iterparse() de ElementTree o cElementTree (supongo cElementTree sería mejor si se puede usar)

Esta pieza describe más o menos lo que tiene que hacer: http://effbot.org/zone/element-iterparse.htm#incremental-parsing

Este probablemente sea la forma más eficiente de hacerlo en Python. Asegúrese de que no se olvide de llamar .clear() en los elementos correspondientes ( realmente no quieren construir un árbol en memoria de un fichero XML 20gig: el método descrito en .getiterator() Otra respuesta es un poco más sencillo, pero hace requieren el todo el árbol primero - Supongo que el póster realmente también tenía iterparse() en mente)

0

El MySQL documentation no parece indicar que la importación XML esté restringida a la versión 6. Al parecer también funciona con 5.

Cuestiones relacionadas