Как создать отдельный преобразованный файл вместо перезаписи выходного файла 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