Наш общий процесс:
- Копирование данных из исходных таблиц в
таблицы с одинаковыми
структура в загрузочной базе данных
- Преобразование данных в этап
стол, имеющий одинаковую структуру
в качестве конечной таблицы фактов / измерений
- Копирование данных из промежуточных таблиц в
таблицы фактов / измерений
Служба SSIS подходит для этапа 1, который представляет собой процесс копирования 1: 1 с некоторыми основными сопоставлениями типов данных и преобразованиями строк.
Для шага 2 мы используем сочетание хранимых процедур, .NET и Python. Большая часть логики в процедурах, с такими вещами, как тяжелый анализ во внешнем коде Основным преимуществом чистого TSQL является то, что очень часто преобразования зависят от других данных в загружаемой базе данных, например, Использование таблиц сопоставления в SQL JOIN намного быстрее, чем процесс построчного поиска во внешнем скрипте, даже с кэшированием. По общему признанию, это - только мой опыт, и процедурная обработка могла бы быть лучше для набора данных.
В некоторых случаях нам приходится выполнять сложный анализ (последовательностей ДНК), и TSQL просто не является жизнеспособным решением. Вот где мы используем внешний код .NET или Python для выполнения работы. Я полагаю, что мы могли бы делать все это в процедурах / функциях .NET и хранить их в базе данных, но для этого требуются другие внешние соединения, поэтому имеет смысл отдельная программа.
Шаг 3 - это серия операторов INSERT ... SELECT ...: это быстро.
Так что, в общем, используйте лучший инструмент для работы, и не беспокойтесь о путанице. Пакет SSIS - или пакеты - это хороший способ связать воедино хранимые процедуры, исполняемые файлы и все, что вам нужно сделать, чтобы вы могли спроектировать, выполнить и зарегистрировать весь процесс загрузки в одном месте. Если это огромный процесс, вы можете использовать подпакеты.
Я знаю, что вы имеете в виду, когда TSQL чувствует себя неловко (на самом деле, я нахожу его более повторяющимся, чем все остальное), но это очень и очень быстро для операций, управляемых данными. Поэтому я чувствую, что обработка данных в TSQL и обработка строк или другие сложные операции во внешнем коде.