Импортировать и проверять XML-файл, используя SSIS или просто T-SQL? - PullRequest
2 голосов
/ 26 августа 2011

Какова оптимальная практика при импорте и проверке файла XML в одной таблице (сведенной) в SQL Server?

У меня есть XML-файл, который содержит около 15 сложных типов, которые все связаны с одним родительским элементом. Дизайн служб SSIS может выглядеть следующим образом: SSIS Но со всеми этими (15) объединениями становится очень сложно.

Может быть, лучше написать код T-SQL для:
1) Импортируйте XML в столбец, который имеет тип XML и связан с XSD-схемой.
2) Используйте этот код:

TRUNCATE TABLE XML_Import
INSERT INTO XML_Import(ImportDateTime, XmlData)
SELECT GETDATE(), XmlData 
FROM
(
    SELECT  * 
    FROM    OPENROWSET (BULK 'c:\XML-Data.xml', SINGLE_BLOB) AS XMLDATA
) AS FileImport (XMLDATA)

delete from dbo.UserFlat
INSERT INTO dbo.UserFlat
SELECT
    user.value('(UserIdentifier)', 'varchar(8)') as UserIdentifier,
    user.value('(Emailaddress)', 'varchar(70)') as Emailaddress,
    businessaddress.value('(Fax)', 'varchar(70)') as Fax,
    employment.value('(EmploymentData)', 'varchar(8)') as EmploymentData,
    -- More values here ...
FROM  
    XML_Import CROSS APPLY
    XmlData.nodes('//user') AS User(user) CROSS APPLY
    user.nodes('BusinessAddress') AS BusinessAddress(businessaddress) CROSS APPLY
    user.nodes('Employment') AS Employment(employment)
    -- More 'joins' here ...

для заполнения таблицы 'UserFlat'?
Некоторые недостатки заключаются в том, что вам приходится вводить SQL-код вручную, но преимущество в том, что у меня есть более прямой контроль над обработкой и преобразованием элементов. Но я не знаю, есть ли различия в производительности между обработкой XML в SSIS и обработкой XML с помощью операторов T-SQL XML.


Обратите внимание, что некоторые другие требования:

  1. Обработка ошибок: в случае ошибки человеку необходимо отправить электронное письмо.
  2. Может обрабатывать несколько входных файлов с определенным шаблоном имени файла: XML_ {date} _ {time} .xml
  3. Переместить обработанные файлы XML в другую папку.

Пожалуйста, совет.

1 Ответ

6 голосов
/ 27 августа 2011

Исходя из упомянутых вами требований, я бы сказал, что вы можете использовать лучшее из двух миров (T-SQL и SSIS).

Мне кажется, что T-SQL дает больше гибкости при загрузке данных XML, которые вы описали в этом вопросе.

Есть много разных способов достичь этого. Вот один из возможных вариантов:

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

  2. Выполните операцию загрузки данных XML, используя способ T-SQL, который вы считаете более простым.

  3. Используйте пакет служб SSIS для обработки ошибок, обработки файлов, архивирования и отправки электронной почты.

  4. Использовать функцию регистрации, доступную в SSIS. Это просто требует простой настройки. Вот примеры, которые показывают, как настроить ведение журнала в SSIS Как отслеживать состояние строк, успешно обработанных или не выполненных в задаче потока данных служб SSIS?

  5. Пример макета вашего потока будет таким, как показано ниже на скриншоте. Зацикливать файлы с помощью контейнера Foreach Loop. Передайте путь к файлу в качестве параметра для задачи «Выполнение SQL», которая, в свою очередь, вызовет T-SQL, который вы упомянули. После обработки файла с помощью задачи «Файловая система» переместите файл в папку архива.

  6. Пример, используемый в SSIS для чтения нескольких файлов xml из папки показывает, как перебирать файлы с помощью контейнера цикла Foreach. Он просматривает XML-файлы, но использует задачу потока данных, потому что XML-файлы представлены в более простом формате.

  7. Пример, используемый в Как отправить записи из таблицы в теле сообщения электронной почты с помощью пакета служб SSIS? показывает, как отправлять электронную почту с помощью задачи «Отправить почту».

  8. Пример, используемый в Как переместить файлы в папку архива после их обработки? показывает, как переместить файлы в папку архива.

  9. Образец, используемый в Ветвление после задачи файловой системы в SSIS без сбоя пакета показывает, как продолжить выполнение пакета даже после сбоя конкретной задачи. Это поможет вам продолжить выполнение пакета даже в случае сбоя цикла Foreach и отправки электронной почты. Синяя стрелка на скриншоте указывает на завершение предыдущего задания.

  10. Пример, используемый в Как выбрать самую последнюю созданную папку с помощью контейнера цикла Foreach в пакете служб SSIS? показывает, как выполнить сопоставление с образцом.

Надеюсь, что это дает вам представление.

Flow

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