ssis одновременное выполнение запроса - PullRequest
0 голосов
/ 24 августа 2011

Заранее я новичок в SSIS.

Я запускаю запрос, который дает мне различные значения в столбце A из таблицы A, которые необходимо обработать по порядку (1, затем 2, затем 3 и т. Д., Но числа постоянно меняют начальные и конечные значения).

эти значения столбца A затем имеют группы значений в столбце B, и эти значения необходимо выполнить с помощью хранимой процедуры, но все они могут выполняться одновременно. В настоящее время они работают линейно

Вот изображение того, что мне нужно сделать (код sudo)

Еогеасп { для каждого { processX } }

что я хочу: для каждого { processA processB ProcessC одновременно нет конфликтов, о которых нужно беспокоиться }

Я использую поток управления в SSIS, и у него есть цикл foreach, который хорош, однако я не знаю, что использовать, чтобы позволить ему одновременно запускать вторую часть.

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

В настоящее время нет способа запустить цикл по каждому элементу в «параллельном режиме».

Лучшее, что я могу придумать, - это перестроить вашу архитектуру в гибкую «потоковую» модель потоков, где вы можете распараллелитьнезависимо.

Для этого потребуются два пакета служб SSIS.Один для снабжения рабочих подразделений, а другой - для их работы.Таким образом, пакет «controller» будет выполнять цикл foreach для TableA, собирая все необходимые ему значения.Затем эти значения будут вставлены в таблицу «работа для выполнения».«Рабочий» пакет будет состоять из цикла For Loop, внутри которого у вас будет задача «Выполнение SQL», которая запрашивает таблицу «работа, которую нужно выполнить» для первой строки, над которой не работали, и если бы она нашла такойстрока, пометьте его как работающий (все внутри транзакции, чтобы избежать коллизий).Тогда у вас будет «рабочий блок», с которым вы будете работать, или нет.Ограничение приоритета для вашей следующей задачи будет выполняться только в том случае, если на самом деле есть какие-то инструкции.Выражение Eval вашего For Loop может быть сработано так, чтобы останавливаться, когда вы не видите никаких новых рабочих единиц (хотя вам может потребоваться задержка, чтобы убедиться, что ваши рабочие не были быстрее контроллера).

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

0 голосов
/ 24 августа 2011

Когда я хочу параллельное выполнение в SQL Server в потоке управления, я обычно помещаю несколько циклов For-Each и возвращаю отдельный набор записей для каждого из них.

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