Запрошен отзыв о дизайне главного пакета служб SSIS — запуск нескольких подпакетов

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

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

Первоначальный дизайн заключался в том, чтобы сгруппировать пакеты в более мелкие фрагменты, называемые директориями, которые вызывают фактические пакеты. Образец ниже:

МастерСтарый

Мастер-подчиненный

Несколько восприятий, которые я вижу (и испытываю) при таком подходе, заключаются в следующем: 1. Каждый пакет должен открываться (даже если в его запуске нет необходимости, т.е. файл отсутствует) 2. # 1 добавляет так много времени для завершения процесса 3. Работает параллельно точно

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

Основной новый

Я не уверен, что он работает параллельно (на самом деле я в этом сомневаюсь).

Я добавляю поток данных, который заполняет объект ADO, который повторяется в foreach, чтобы продемонстрировать обрабатываемые файлы.

Поток данных

Примечание. Обычно в среде DEV не так много файлов для обработки, однако при развертывании в TEST и PROD будет обрабатываться большинство файлов.

Могу ли я получить отзывы об этих двух разных подходах?

Любой, кто предоставит продуктивную обратную связь, получит плюсы!!!


person KeithL    schedule 11.07.2017    source источник
comment
Проверьте мое решение ниже. Кстати, а как у вас черный фон? Я тоже использую sql-2012, но он серый. :О   -  person Prabhat G    schedule 12.07.2017
comment
@PrabhatG Инструменты..Параметры..Цветовая тема (темная)   -  person KeithL    schedule 12.07.2017


Ответы (2)


Я бы выбрал модифицированный первый подход, то есть что-то вроде пакета Inside, используйте Script task, чтобы проверить, присутствуют ли файлы в месте назначения или нет.

Например :

  1. Создайте задачу «Сценарий» и переменную.

img1


  1. Внутри задачи скрипта напишите код, похожий на изображение ниже (логика такова, если файл найден, пометьте его как истинный, иначе пометьте как ложный):

img2


  1. Теперь ограничьте выполнение ДПФ с помощью этого флага, как показано ниже:

img3

Единственный минус, вам придется внести изменения в 50 пакетов, но это разовое действие. Ваше параллельное выполнение останется нетронутым.

person Prabhat G    schedule 12.07.2017
comment
Это уже в пакетах, чтобы проверить. Старые делали это таким образом, но новые используют файловый цикл foreach с точно указанным файлом. Я обнаружил, что метод foreach легче передать младшим БД по сравнению с задачей сценария. - person KeithL; 12.07.2017
comment
Однако простое открытие упаковки и проверка требуют времени. - person KeithL; 12.07.2017
comment
Логически открывать 100 пакетов вместе и запускать 1 задачу сценария должно быть проще, чем решать один за другим, следует ли открывать пакет или нет. Просто мое мнение. Может быть, вы можете запустить его самостоятельно и оценить производительность? - person Prabhat G; 12.07.2017

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

Вот предложения по улучшению второго подхода:

  • Создайте контрольную таблицу со всеми именами пакетов, флагом включения/отключения, флагом FileAvailable.
  • Создайте пакет опроса, который будет проходить через файлы и соответственно устанавливает флаг и флаг пакета.
  • Прокрутите эту таблицу управления и запустите только те, которые включены и имеют файл.
person SanjayJ    schedule 11.07.2017
comment
Меня беспокоит потеря скорости из-за того, что я не двигаюсь параллельно. Вместо отдельного пакета я создал поток данных и сохранил необходимую информацию в ADO.Recordset, который проходит через цикл. Я добавлю поток данных к вопросу для справки. - person KeithL; 11.07.2017