Как создать отдельный преобразованный файл вместо перезаписи выходного файла ssis?

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

За. например. У меня есть 5 плоских файлов,test_1.txt,test_2.txt,test_3.txt,test4_.txt и test_5.txt в папке. После выполнения задания я вижу только данные из последнего файла test_5.txt, преобразованные в файл назначения.

2 ответа

Вот шаги на рабочем примере, который я протестировал.

переменные

У меня есть 3 переменные, определенные:

  • FileName - для использования в цикле foreach
  • DestinationDir - куда идут файлы
  • SourceDir - где находятся файлы, которые я хочу обработать

Настройка цикла по каждому элементу

У меня есть цикл foreach, настроенный как:

  • Выражение для "Directory" установлено в @[User::SourceDir]
  • Получить имя файла, установленное на "Имя и расширение"

Затем в разделе "Переменные отображения":

Это означает, что поскольку цикл foreach выполняет итерации по файлам в каталоге, он будет устанавливать "Имя и расширение" файла в переменной @[User:FileName]

Задача потока данных

Я добавляю Задачу потока данных внутри цикла foreach:

Затем внутри DFT у меня есть простой источник плоского файла для назначения плоского файла. Мы просто передадим содержимое каждого файла новым файлам:

Во время первоначальной разработки я вручную выберу один файл для настройки каждого источника и назначения. Затем вернитесь и измените диспетчеры соединений и установите выражение в ConnectionString.

Выражения диспетчера подключений

Диспетчер соединений SourceFile:

  • ConnectionString получает выражение в виде: @[User::SourceDir] + @[User::FileName]

Диспетчер соединений DestinationFile:

  • ConnectionString получает выражение в виде: @[User::DestinationDir] + @[User::FileName]

тестирование

У меня есть 2 тестовых файла в моей исходной директории и нет файлов в моем месте назначения:

После выполнения пакета я получаю успех, а также получаю новые файлы в пункте назначения:

Существуют способы сделать то, что вы просите в SSIS, с помощью переменных и выражений, но есть более простой способ сделать это с помощью командной строки.

Поскольку вы просто консолидируете текстовые файлы в 1, вы можете использовать командную строку, чтобы лучше решить вашу проблему:

copy *.txt output.txt
Другие вопросы по тегам