Поиск служб SSIS с переменными условиями - PullRequest
1 голос
/ 07 сентября 2010

Я использую SQL Server 2005 для разработки пакета служб SSIS.Мой поток данных содержит поиск служб SSIS.Каждая из строк, которые я обрабатываю, имеет эти столбцы (среди прочих): ID1, detailsID1, ID2, detailsID2.Значение столбца detailsID1 должно быть загружено из поиска на основе ID1, а значение для detailsID1 из другого поиска на основе ID2.Дело в том, что эти два поиска идентичны: я делаю один и тот же выбор для одинаковых столбцов в одной и той же таблице (ID1 и ID2 - это некоторые идентификаторы записей, содержащихся в одной таблице)Есть ли способ, которым я могу использовать только один поиск для загрузки обоих столбцов сведений?Я не хочу использовать 2 поиска, потому что эта таблица огромна.

Есть ли у вас какие-либо идеи о том, как я могу это сделать?Любая идея с благодарностью!

1 Ответ

1 голос
/ 07 сентября 2010

Компонент Lookup может быть проблемой для больших таблиц.Вы можете попробовать несколько вариантов.

Сначала используйте оператор SQL, который соединяет таблицу поиска с исходными данными.Это потребует нескольких задач потока данных.Ваш существующий поток данных будет выводиться в промежуточную таблицу назначения в базе данных.Затем вы можете создать новый поток данных, где источником является запрос, который присоединяет вашу таблицу поиска один раз для каждого поиска в промежуточной таблице.Примером запроса может быть:

SELECT lt1.detailsID1, lt2.detailsID2, <other StagingTable columns>
FROM StagingTable st
LEFT OUTER JOIN LookupTable lt1 ON st.ID1 = lt1.ID1
LEFT OUTER JOIN LookupTable lt2 ON st.ID2 = lt2.ID2

Поиск завершен как часть запроса SQL.

Другой вариант - выполнить процесс объединения с использованием компонентов потока данных.Обратите внимание, что он будет использовать много памяти на компьютере, на котором выполняется пакет служб SSIS.

Используя текущий поток данных, добавьте новый источник, который получает данные из таблицы поиска.Добавьте компонент Multicast в поток данных и создайте путь потока данных от исходных выходных данных к входу Multicast.

Добавьте компонент Merge Join и добавьте выходные данные из первичного источника в качестве левого входа и добавьте первыйМногоадресный вывод как правильный вход.Обратите внимание, что входные данные уже должны быть отсортированы в последовательности ключа соединения (ID1 для первого соединения и ID2 для второго соединения - см. Ниже).Настройте объединение слиянием как левое внешнее объединение с соответствием по столбцам ID1.Включить столбец DetailID1 в вывод

Добавить компонент сортировки и второе объединение слиянием.Выходные данные первого объединения слиянием поступают в компонент Sort.Установите ключ сортировки для столбца ID2.Выход Sort переходит ко второму компоненту Merge Join в качестве входа Left join.Второй выход Multicast поступает на второй вход Merge Join.Настройте второе объединение слиянием так же, как и первое объединение слиянием, но для столбца ID2.

alt text

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

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