2009-06-05 3 views
9

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

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

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

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

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

+1

Не можете ли вы запустить файл на консоли и посмотреть на его схему? http://en.wikipedia.org/wiki/List_of_DOS_commands#type –

+6

гигантские файлы xml без документированных схем! = авторитетные программисты –

+0

Теперь я посмотрел схему файла в своем блоге. logicflip.com/2009/06/stackoverflow-download-data-schema Надеюсь, это поможет! http://www.jonwinstanley.com/2009/06/stackoverflow-download-data-schema/ –

ответ

3

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

+2

"UPDATE 2013: Этот код больше недоступен. Размер экспорта StackOverflow вырос за пределы того, что вы можете импортировать с помощью этого метода". Стоит отметить. –

1

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

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

+0

Я уже использую Notepad ++. Это обычно довольно солидно. Однако эти файлы варьируются от 19 до 850 мб. К сожалению, тот, который я действительно хочу увидеть, большой. –

+1

Единственный редактор, который я знаю об этом, может обрабатывать файлы размером больше вашего RAM-размера UltraEdit (http://www.ultraedit.com/) –

+0

У меня много оперативной памяти, 1,5 гб (доступно 1,05). Но взгляните на UltraEdit в любом случае. Благодаря! –

4

Попробуйте бесплатную утилиту 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 

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

0

Для просмотра очень больших файлов, я нашел V file viewer отличным.

Я использовал его для файлов размером до 8 ГБ. Для файлов с фиксированной длиной записи очень легко перемещаться на основе размера блока, поскольку он основан на диске.

Обратите внимание, что возможности редактирования невозможны.

Сказав, что одна сложность с XML заключается в том, что это не очень хороший формат для больших «потоков», поскольку он имеет общую структуру начала и конца, а парсер, который не может хранить весь файл в памяти, может сделайте несколько причудливых трюков, чтобы убедиться, что он соответствует DTD или схеме.

1

Я тестировал MSSQL XML-анализатор широко, то Bcp.exe утилита работает большой для этого. Трюк подходит к правильному ограничителю строк, поскольку он должен быть значением, которое не может быть в вашем документе.Например, вы можете сделать это:

create table t1(x xml) 

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

- ++++++++ -

Тогда конкатенации, что до конца своего экземпляра документа из командной строки:

копия myFile.xml + delim.txt out.xml/б

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

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

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

0

Вы пытались использовать 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 

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

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

Марк

0

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

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

Также Baretail должен отображать ваши файлы, не разбирая пота.

1

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

Если у вас есть Cygwin установлен у вас уже есть хорошие утилиты GNU для того чтобы достигнуть этого: головку

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

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

+0

Хороший план. Хотя некоторые необычные теги могут быть пропущены в первых нескольких записях. –

5

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

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

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

Мой 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, у вашего менеджера будет впечатление, что вы не сделали никакой работы.

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

Примечание: вопрос довольно старый, но проблема остается горячей. Я добавил этот пост разработчикам, которые Google, как BULK LOAD XML-файлы в SSIS и приземляются здесь.

Смежные вопросы