#c# #sql-server #ssis #dataflow
#c# #sql-сервер #ssis #поток данных
Вопрос:
Предыстория:
Я пытаюсь перебрать список файлов .sql, выполнить каждый файл, сохранить результат каждого запроса в текстовый файл со специальным именем и разделителями. Прямо сейчас я достигаю этого, используя полностью автономную программу на C #. Я новичок в SSIS, но я очень хорош в C #. В дальнейшем в ИТ-отделе, в котором я буду работать, SSIS является предпочтительным решением, поэтому перенос всего этого в действие гигантского скрипта (к сожалению) не является решением.
Проблема:
Ниже приведена картина моего потока управления.
Желаемый эффект заключается в следующем:
- Foreach перебирает папку с файлами .sql.
-
Задача Load SQL присваивает переменной содержимое текущего файла .sql.
(Оба этих шага работают)
-
Задача потока данных:
- выполняет SQL в переменной И!
- сохраняет результат произвольного размера в переменную или файл.
-
(Вернемся к потоку управления:) Отсутствует: сохранение отчета с изменяющимся разделителем и изменяющимся именем файла.
- Отчет о загрузке выполняет WinSCP, чтобы захватить файл и поместить его в n> 1 назначенных местоположений.
Вопрос:
Как мне сделать так, чтобы поток данных не заботился о количестве столбцов? Например, отчет 1 содержит пять столбцов, отчет 2 — 50, а отчет 3 — 25. Все эти вещи в порядке. Мне все равно, сколько в нем столбцов, и в этом случае мне действительно было бы наплевать на метаданные.
Я могу сделать это с помощью C #, просто сказав: «Вот таблица данных, заполните ее». SSIS, по-видимому, не хватает этой способности адаптироваться к количеству столбцов. Да? Нет? Скажем, вверните это и просто сделайте это с помощью объекта script? Какова полученная мудрость о том, что здесь делать?
Если этот вопрос выявляет какое-то фундаментальное непонимание того, как работает SSIS, не стесняйтесь прокомментировать и это.
Заранее спасибо!
Комментарии:
1. Если вы уже знаете, как это сделать, напишите сценарий. SSIS с произвольными столбцами в 2008 году затруднен. Я не знаю об этой версии.
Ответ №1:
Я бы отказался от всего этого подхода — это не путь к успеху с SSIS.
SSIS кэширует метаданные потока данных (например, столбцы, типы данных, даже точность типов данных), и изменение этих метаданных обычно подразумевает изменение дизайна пакета.
Вместо этого я бы создал пакет SSIS с 3 задачами потока данных или столько, сколько у вас есть вариантов (по одному на «Отчет» / SQL script). Внутри каждой задачи потока данных будет источник OLE DB и назначение плоского файла.
Сила этого становится очевидной во время выполнения — SSIS может выполнять множество задач потока данных параллельно (по умолчанию установлено # ядер * 2) и выводит данные текстового файла с невероятной скоростью по сравнению с C #.