2010-08-20 2 views
4

Итак, я только что начал diggin SSIS сегодня, поэтому не слишком сильно ненавижу, если есть что-то очевидное, чего я не вижу.SSIS: от XML-файла до нескольких таблиц

Так у меня есть XML-файл (от третьих лиц)

<root> 
    <foo> 
     <fooId>12345</fooId> 
     <name>FOO</name> 
     <bars> 
      <bar>BAR 1</bar> 
      <bar>BAR 2</bar> 
      [...] 
     </bars> 
    </foo> 
    [...] 
</root> 

и соответствующие таблицы в моей БД:
Foo с полями (FooID, имя)
Бара с полями (BARID (идентичность ПК), FooID, Name)

Итак, в основном, Bar - это набор атрибутов для Foo.

Поэтому я добавляю источник XML, который указывает на этот файл, и он создает 3 разных набора данных (foo, bars, bar). Проблема в том, что набор bar содержит значение bar + некоторый автогенерированный идентификатор, что не очень полезно. Единственный способ, который я вижу отсюда, чтобы получить bar с bar значением и fooId, - это сортировка и слияние - объединение этих наборов, что кажется довольно странным и, вероятно, будет зверски убивать производительность (мы говорим о сотнях K's foo здесь).

Вопрос: как это сделать должным образом?

ответ

1

Я бы не стал беспокоиться об оптимизации производительности. Просто добавьте еще один шаг SSIS для преобразования наборов данных.

Когда у вас есть все, что нужно для работы обзора. Преобразования SSIS легче поддерживать, чем XSLT. Сотни K's foo не должны быть проблемой, в зависимости от того, как часто вы запускаете модуль.Я не использовал SSIS для ETL для некоторого времени, поэтому я не совсем уверен в этом, но я использую XSLT, а дополнительный шаг SSIS проще поддерживать, если вы держите его простым.

Просто мое мнение.

1

У меня еще не было возможности использовать какие-либо источники данных XML еще в SSIS. BizTalk - наш инструмент выбора здесь. Несмотря на это, я сделал небольшое исследование и нашел очень полезную статью здесь:

http://blogs.msdn.com/b/mattm/archive/2007/12/11/using-xml-source.aspx

Следуйте раздел о работе с несколькими выходами, кроме сделайте следующее:

  1. Заменить все ссылки на их элемент с ваш элемент
  2. Заменить все ссылки на их элемент с элементом

Таким образом, на основе Thi s, настройте источник данных XML в статье. Измените его с помощью расширенного редактора свойств, используя упомянутые выше пометы. Возьмите два выхода для бара и баров и направьте их в объединение слияния. Внутренние присоединяются к ним по барам_Id. Выберите столбец и foo_Id в качестве выходных столбцов. Это позволит вам кормить таблицу Bars.

Я знаю, что это не идеально, поскольку вы сортируете и объединяете соединение. Надеюсь, сделав сортировку в источнике данных XML, он не будет иметь большого влияния на производительность.

Еще один вопрос, который следует рассмотреть, - использовать файл XSLT для выравнивания XML. Это делается с помощью задачи XML в потоке управления. Вот статья, которая может быть полезной, а также:

http://blogs.msdn.com/b/mattm/archive/2007/12/15/xml-source-making-things-easier-with-xslt.aspx

Good Luck!

+0

Это то, что я делаю прямо сейчас ... То, что я ожидал найти, - это возможность просто добавить столбец в набор подэлемента из его родительского элемента, поскольку он уже задан структурой, но там кажется, нелегкий способ сделать это (или, может быть, я слепой?) –

+1

Итак, я бы попытался использовать подход XSLT. Это сгладит схему XML до такой степени, что вы можете получить только один вывод из источника данных XML. Как ни парадоксально, что мы используем XSLT, чтобы заставить XML работать как плоский файл. –

1

@ ваш комментарий к Крису: есть простой способ добавить столбец на объект. Добавьте шаг внутри задачи потока данных, используйте шаг трансформации «Производный столб». Внутри там добавьте/обработайте нужные столбцы.

XSLT - это боль.

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