Импорт XML в базу данных SQL - PullRequest
5 голосов
/ 07 апреля 2009

Я работаю с 20-гигабайтным XML-файлом, который я хотел бы импортировать в базу данных SQL (предпочтительно MySQL, поскольку это то, с чем я знаком). Кажется, что это будет обычная задача, но, немного погуглив, я не смог понять, как это сделать. Каков наилучший способ сделать это?

Я знаю, что эта возможность встроена в MySQL 6.0, но сейчас это не вариант, потому что это альфа-версия для разработки.

Кроме того, если мне придется делать какие-либо сценарии, я бы предпочел использовать Python, потому что это то, с чем я больше всего знаком.

Спасибо.

Ответы [ 5 ]

4 голосов
/ 07 апреля 2009

Вы можете использовать функцию getiterator () для итерации по XML-файлу, не анализируя все сразу. Это можно сделать с помощью ElementTree , входящего в стандартную библиотеку, или с помощью lxml .

.
for record in root.getiterator('record'):
    add_element_to_database(record) # Depends on your database interface.
                                    # I recommend SQLAlchemy.
2 голосов
/ 07 апреля 2009

Взгляните на функцию iterparse() из ElementTree или cElementTree (я думаю, cElementTree было бы лучше, если бы вы могли ее использовать)

Эта часть описывает более или менее то, что вам нужно сделать: http://effbot.org/zone/element-iterparse.htm#incremental-parsing

Вероятно, это будет самый эффективный способ сделать это в Python. Убедитесь, что не забыли вызвать .clear() для соответствующих элементов (вы действительно не хотите создавать дерево памяти в файле XML объемом 20 гигабайт: метод .getiterator(), описанный в другом ответе, немного проще, но требует сначала всего дерева - я предполагаю, что на самом деле плакат имел в виду и iterparse()

1 голос
/ 07 апреля 2009

Я делал это несколько раз с Python, но никогда с таким большим XML-файлом. ElementTree - отличная библиотека XML для Python, которая будет полезна. Если бы это было возможно, я бы разделил XML на более мелкие файлы, чтобы было легче загружать его в память и анализировать.

0 голосов
/ 10 апреля 2009

Документация MySQL , похоже, не указывает, что импорт XML ограничен версией 6. По-видимому, он работает и с 5.

0 голосов
/ 07 апреля 2009

Это может быть обычной задачей, но, возможно, 20 ГБ не так распространены в MySQL, как в SQL Server.

Я сделал это с помощью служб интеграции SQL Server и небольшого количества пользовательского кода. Необходимость того или иного из них зависит от того, что вам нужно делать с 20 ГБ XML в базе данных. Будет ли это один столбец из одной строки таблицы? Одна строка на дочерний элемент?

SQL Server имеет тип данных XML, если вы просто хотите сохранить XML как XML. Этот тип позволяет выполнять запросы с использованием XQuery, позволяет создавать XML-индексы поверх XML и позволяет «строго типизировать» столбец XML, ссылаясь на набор XML-схем, которые хранятся в базе данных. 1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...