2015-07-06 7 views
-1

Я разработал один главный пакет (Main.dtsx) и 3 дочерних пакета (Processor.dtsx). Примечание. Код одинаковый для всех дочерних пакетов, который захватывает файлы из исходного местоположения и процесса. Чтобы оптимизировать производительность, я хочу, чтобы все эти 3 дочерних пакета должны запускаться одновременно на 10000 файлах таким образом, чтобы первый ребенок выбирал 1-й файл и запускал выполнение, в то время как секунда будет отображать второй файл и так далее. Пожалуйста, поделитесь этим кодом, если у вас есть. Я попробовал параметр «MaxConcurrentExecutables», но в этом случае все компоненты получают доступ к тому же файлу, который не ожидается.Параллельное выполнение в ssis

ответ

0

Это не может быть сделано с помощью Loop Foreach, но вы можете выполнить задачу с задачей сценария:

  1. Добавить 3 строковые переменные для хранения имен файлов (т.е. ФАЙЛА1 File2, file3)
  2. Передайте переменные из основного пакета в каждый дочерний пакет.
  3. В каждом дочернем пакете настройте выражение в диспетчере соединений файлов, чтобы использовать этот параметр в качестве строки подключения
  4. В конце каждого пакета убедитесь, что файл перемещен из исходной папки или переименован в такой что он будет проигнорирован в последующих циклах.
  5. Настройте цикл For, который завершится, когда все файлы будут обработаны. Вы можете добавить логическую переменную в пакет, например «ProcessingIsAllDone», а затем установить это в задаче сценария.
  6. В верхней части цикла For добавьте задачу сценария и соедините задачи выполнения пакета с прецедентными ограничениями.
  7. Используйте сценарий ниже, чтобы установить переменные

    using System; 
    using System.Data; 
    using Microsoft.SqlServer.Dts.Runtime; 
    using System.Windows.Forms; 
    using System.IO; 
    
    namespace ST_e4ccd9cfaa4847ff86ec88c215c1961c 
    { 
        [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] 
        public partial class ScriptMain :  Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
        { 
         public void Main() 
         { 
          DirectoryInfo sourceDirectory = new DirectoryInfo(@"c:\temp"); 
          int loops = 3; 
          foreach (FileInfo sourceFile in sourceDirectory.GetFiles("*.txt")) 
          { 
           if (loops == 0) 
           { 
            break; 
           } 
           string variableName = String.Format("File{0}", loops); 
           Dts.Variables[variableName].Value = sourceFile.FullName; 
           loops--; 
          } 
          if (sourceDirectory.GetFiles("*.txt").Length <= 3) 
          { 
           Dts.Variables["ProcessingIsAllDone"].Value = true; 
          } 
          Dts.TaskResult = (int)ScriptResults.Success; 
         } 
    
        #region ScriptResults declaration 
        enum ScriptResults 
        { 
         Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, 
         Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure 
        }; 
        #endregion 
    
        } 
    } 
    
Смежные вопросы