SSIS - как да накарам контролния поток да продължи, преди текущата стъпка да е завършена?

Имам заявка, която анкетира таблица за планирани ETL задачи, които да се инициират. Заявката ми дава името на пакета и необходимите параметри, които да бъдат подавани към него. Искам да изпълня всички тях паралелно, но тъй като броят на планираните задачи за изпълнение е динамичен, използвам цикъл ForEach, за да обикалям всеки ред, върнат от моята заявка, и по същия начин да ги изпълнявам динамично. Това изглежда определено последователно, а не паралелно. Това, което искам да се случи, е контролният поток да стартира SSIS пакета и да продължи към следващата итерация, да стартира следващия пакет и т.н., вместо да чака един пакет да завърши, преди да започне следващия.

Има ли начин това да стане?


person GreenShepherd    schedule 06.06.2014    source източник


Отговори (1)


Точното решение зависи от детайлите на приложението, но като общ подход бих предложил да прочетете таблицата в една или повече променливи и да използвате стойността на тези променливи като ограничение за приоритет, за да изпълните съответно пакетите. Това ще избегне използването на for цикъла и ще осигури паралелизъм.

Друго решение за проучване е SQL Server Agent, който върши прилична работа в повечето случаи.

Пример за SSIS. Да кажем, че четем задачите от sql сървъра в променливи RunTask1, RunTask2, RunTask3, RunTask4 и RunTask5. Ще изпълним съответната задача, ако стойността на променливата е 1 и няма да изпълним за друга стойност. Картината по-долу показва как да използвате тези данни като приоритетни ограничения (задача 3 в примера):

въведете описание на изображението тук

person Jayvee    schedule 07.06.2014
comment
Използването на ограничение за приоритет звучи като интересна алтернатива, но не съм сигурен, че следвам. Ако съм заредил таблицата със задачи на опашка в променлива, как да прочета това от контрола за ограничение на приоритета? Също така, как точно това би осигурило паралелизъм? Може би бихте могли да ми дадете пример за това, което имате предвид..? - person GreenShepherd; 09.06.2014
comment
Добавих пример. - person Jayvee; 10.06.2014
comment
Благодаря за това. Ами ако, например, имах множество екземпляри на Задача 1 (с различни параметри, разбира се), които обаче трябваше да се изпълняват паралелно? - person GreenShepherd; 11.06.2014