Программный импорт данных XML на сервер MS SQL - PullRequest
9 голосов
/ 06 июня 2009

У меня есть 5 больших файлов XML , которые я хочу проанализировать. Все они слишком велики для открытия в текстовом редакторе , поэтому я не знаю их XML-схем.

Я пытался импортировать их на SQL-сервер, однако этот процесс дал мне ошибку, хотя я почти уверен, что они действительны, так как они были получены от очень авторитетных программистов .

Я также пробовал другие методы, но каждый из них борется с большими размерами файлов ( MySQL ) или утверждает, что файлы содержат недопустимые символы XML ( Access & Excel ).

Как мне программно читать и вставлять данные? Можно ли это сделать с помощью SQL-запроса?

Большое спасибо!

Ответы [ 11 ]

5 голосов
/ 21 июня 2013

По состоянию на 2013 год ...

Единственная возможность сэкономить время, по моему мнению, для загрузки больших / огромных файлов XML в SQL Server - это (как кто-то ранее кратко упомянул) использование библиотеки SQLXML 4.0 .

Это решение, которое я принял для ежедневной загрузки огромных файлов XML (размером 7 ГБ ). Предыдущий процесс, который использовал манипулирование C # в задаче сценария, занял несколько часов. Использование SQLXML 4.0 занимает 15-20 минут . Как установить SQLXML 4.0. шаг за шагом здесь . Для практических примеров того, как это сделать от начала до конца , перейдите по ссылке MSDN

Мой XML также имеет вложенные элементы, поэтому он довольно сложный, в результате получается 10 таблиц с 2,5-4 миллионами строк в каждой (ежедневный файл иногда превышает 7 ГБ). Моя работа основывалась исключительно на информации, которую я узнал и применил по двум указанным выше ссылкам.

  • Преимущества

    • это быстро
    • это Microsoft (http://www.microsoft.com/en-gb/download/details.aspx?id=30403)
    • Пакет служб SSIS будет очень упрощен
    • вам не нужно тратить часы и часы на изменение пакета служб SSIS, если ваша XML-схема изменяется. SQLXML может создавать таблицы в SQL Server для вас каждый раз, когда вы запускаете пакет, на основе предоставленных вами отношений XSD.
  • Недостатки

    • создание XSD может занять некоторое время и потребовать некоторых знаний. Когда я это сделал, я узнал что-то новое, так что это не было для меня недостатком.
    • увидев, насколько прост пакет SSIS, у вашего менеджера будет впечатление, что вы не выполняли никакой работы.

Для просмотра больших файлов используйте Средство просмотра больших текстовых файлов , красивый маленький драгоценный камень.

Примечание. Вопрос довольно старый, но проблема остается горячей. Я добавил этот пост для разработчиков, которые Google, как ЗАГРУЗИТЬ XML-файлы в SSIS и приземлиться здесь.

4 голосов
/ 06 июня 2009

Попробуйте бесплатную утилиту LogParser от Microsoft: http://www.microsoft.com/DownLoads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en

Он предназначен для предоставления SQL-доступа к большим текстовым файлам, включая XML. Что-то вроде

Select top 1000 * from myFile.xml

... должен работать, чтобы вы начали. Кроме того, помните, что документация появится в вашем меню «Пуск» рядом с исполняемым файлом после установки - я не думаю, что в сети есть хорошая копия.

3 голосов
/ 08 июня 2009

Смотрите это сообщение в блоге неофициального члена команды StackOverflow Брента Озара:
http://www.brentozar.com/archive/2009/06/how-to-import-the-stackoverflow-xml-into-sql-server/

1 голос
/ 08 июня 2009

Первое, что я сделал, это получил первые X байтов (например, первые 1 МБ) файлов XML, чтобы я мог взглянуть на них в редакторе по своему выбору.

Если у вас установлено Cygwin , у вас уже есть хорошая утилита GNU для достижения этой цели: head

head.exe -c1M comments.xml > comments_small.xml

В качестве альтернативы вы можете найти собственный порт большинства утилит GNU здесь: http://unxutils.sourceforge.net/

1 голос
/ 07 июня 2009

Вы пробовали SQL Server XML Bulk Load ?

1 голос
/ 06 июня 2009

Я тщательно протестировал парсер mssql xml, утилита bcp.exe отлично подходит для этого. Уловка заключается в использовании правильного ограничителя строки, поскольку это должно быть значение, которое не может встречаться в вашем документе. Например, вы можете сделать это:

create table t1(x xml)

Создайте простой текстовый файл, который содержит только выбранный вами разделитель. Например, поместите эту строку в delim.txt:

- ++++++++ -

Затем объедините это в конец экземпляра документа из командной строки:

копировать myFile.xml + delim.txt out.xml / b

После этого вы можете включить его в базу данных, как:

bcp.exe test.dbo.t1 в out.xml -T -c -r - ++++++++ -

Если документ имеет формат UTF-16, замените ключ -c на -w

1 голос
/ 06 июня 2009

Вы вроде должны знать схему. Попробуйте загрузить TextPad или что-то похожее для просмотра файлов.

Когда вы знаете схему, вы можете сделать несколько вещей, чтобы перевести их в SQL. Одним из подходов будет использование OpenXML http://msdn.microsoft.com/en-us/library/ms186918.aspx.

0 голосов
/ 08 июня 2009

Вы должны загрузить свой XML в базу данных XML , например, Berkeley DB XML или Xindice

Кроме того, я не уверен, что он может масштабироваться до 850 МБ, но Первый объект XML Editor и библиотека анализатора, на которой он построен, могут обрабатывать довольно большие файлы.

Кроме того, Baretail должен отображать ваши файлы без проблем.

0 голосов
/ 06 июня 2009

Вы пытались использовать OPENROWSET для импорта больших файлов XML в таблицу SQL Server?

CREATE TABLE XmlTable
(
    ID INT IDENTITY,
    XmlData XML
)

INSERT XmlTable(XmlData)
  SELECT * FROM 
    OPENROWSET(BULK '(your path)\xmldata.xml',
    SINGLE_BLOB
) AS X

Поскольку у меня нет файлов под 5 ГБ, я сам не могу это проверить.

Есть еще один способ решения этой проблемы: потоковая передача Linq-To-Xml. Прочтите этот пост в блоге , где Джеймс Ньютон-Кинг показывает, как читать XElement по одному, и серию из двух частей здесь и здесь на та же тема в блоге команды Microsoft XML.

Марк

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