SSIS: данные преобразуют строки с разделителями в поле - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть таблица, содержащая строки связанных данных, которые мне нужно преобразовать в пакете служб SSIS, и я не знаю, как это сделать.

В этой таблице строки, связанные друг с другом, разделены строкой, содержащей символ канала, например,

тестовая линия 1_1
тестовая линия 1_2
тестовая линия 1_3
|
тестовая линия 2_1
тестовая линия 2_2
тестовая линия 2_3
|
тестовая линия 3_1
тестовая линия 3_2
тестовая линия 3_3

и т. Д.

Мне нужно переместить это в таблицу и объединить строки каждой группы строк в одну строку, разделенную разделителем канала. Итак, из приведенного выше примера мне нужно закончить в другой таблице:

тестовая линия 1_1 тестовая строка 1_2 тестовая линия 1_3
тестовая линия 2_1 тестовая линия 2_2 тестовая линия 2_3
тестовая линия 3_1 тестовая линия 3_2 тестовая линия 3_3

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

Любая помощь высоко ценится, спасибо.

1 Ответ

1 голос
/ 01 декабря 2010

Вы можете создать задачу «Поток данных», в которой используется компонент «Источник». Источник получит данные с помощью оператора SQL.

Затем добавьте компонент Script в качестве преобразования. Компонент сценария должен быть установлен как асинхронный. Перейдите на вкладку «Входы и выходы» компонента «Сценарий», а затем выберите «Вывод 0.». Установите для параметра SynchronousInputID значение «Нет». Это позволит компоненту выводить количество строк, отличное от количества введенных строк. Добавьте новый столбец под веткой «Выходные столбцы».

В вашем компоненте скрипта вы можете объединять данные по своему желанию. По умолчанию ваш входной буфер будет Row, а выходной буфер будет Output0Buffer. Вы можете использовать Row.NextRow (), чтобы получить следующую входную строку, и Output0Buffer.AddRow (), чтобы добавить новые выходные строки.

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

...