Поток данных служб SSIS — условное разделение

SSIS

Привет.

Во-первых, извините меня, если это не имеет большого смысла, поскольку я довольно плохо знаком с SSIS (как и 2 дня назад).

В конечном итоге я хочу импортировать все данные из XML-файла и, в зависимости от того, какой это файл, обрабатывать по-разному и загружать в набор реляционных таблиц в Microsoft SQL Server 2008.

Каждый файл XML имеет логический флаг 0 или 1. В зависимости от того, 0 или 1, я бы хотел, чтобы поток данных шел по-разному, поскольку каждый тип файла должен обрабатываться по-разному.

Я пытался использовать преобразование условного разделения, но столкнулся с парой проблем.

Я получаю данные, используя XML-источник потока данных, и затем проверяю флаг, в зависимости от того, 0 или 1, поток данных влево или вправо. Однако XML содержит много данных, и я могу переместить только элемент данных с флагом, и мне нужно, чтобы он переместил и остальные данные в том же направлении.

Я подумал, что могу открыть файл, проверить флаг, сохранить флаг как переменную, затем закрыть файл и открыть пакет 0 или пакет 1 в зависимости от переменной, которая затем снова откроет файл xml и вытащит данные. Однако это «пахнет» не так, как я открываю и закрываю один и тот же XML-файл дважды.

Кто-нибудь еще сталкивался с этим и как они обошли это?


person Pixelated    schedule 12.10.2010    source источник


Ответы (1)


Хотя я не думаю, что в открытии файла дважды в операции ETL нет ничего плохого, вы можете достичь своей цели с помощью одной задачи потока данных, которая включает компонент условного разделения, который использует переменную (или производный столбец и т. д.) для выражения условия. Установка переменной может быть легко реализована в задаче потока данных с помощью компонента скрипта.

person orka    schedule 12.10.2010
comment
Привет. Орка, большое спасибо за ответ. Повторюсь, мой XML-файл содержит, скажем, 50 отдельных элементов. Теперь я могу использовать источник XML для условного разделения, чтобы оценить результат одного элемента (флаг), а затем загрузить этот элемент в соответствующую таблицу. Как бы то ни было, мне нужно оценить этот элемент, а затем обработать остальные 49 элементов на основе этого флага. Как вы думаете, мне нужно также рассмотреть использование контейнера последовательности? - person Pixelated; 13.10.2010
comment
Вы можете легко достичь своей цели, используя последовательный контейнер, но если вы не хотите открывать один и тот же файл дважды, вы можете прочитать первый элемент и установить флаг в компоненте скрипта в задаче потока данных. Затем вы должны использовать этот флаг в условном разделении. Если вы перейдете к последовательному пути контейнера, вы можете проверить флаг в первом элементе, а затем решить, какую задачу потока данных запустить. Надеюсь на эту помощь. - person orka; 13.10.2010