ETL: извлечение из 200 таблиц - поток данных SSIS или пользовательский T-SQL?


12

Исходя из моего анализа, полная размерная модель нашего хранилища данных потребует извлечения из более чем 200 исходных таблиц. Некоторые из этих таблиц будут извлечены как часть дополнительной нагрузки, а другие будут полной загрузкой.

Отметим, что у нас есть около 225 исходных баз данных с одинаковой схемой.

Из того, что я видел, построение простого потока данных в SSIS с источником OLE DB и назначением OLE DB требует определения столбцов и типов данных во время разработки. Это означает, что в конечном итоге я получу более 200 потоков данных только для извлечения.

С точки зрения ремонтопригодности это кажется мне большой проблемой. Если бы мне нужно было внести какие-то радикальные изменения в код извлечения, мне пришлось бы изменить 200 различных потоков данных.

В качестве альтернативы я написал небольшой скрипт, который считывает исходные базы данных, имена таблиц и столбцы, которые я хочу извлечь из набора таблиц метаданных. Код выполняется в несколько циклов и использует динамический SQL для извлечения из исходных таблиц через связанный сервер и OPENQUERY.

Исходя из моих тестов, это все еще не так быстро, как использование потока данных SSIS с источником и местом назначения OLEDB. Поэтому мне интересно, какие у меня есть альтернативы. Мысли до сих пор включают в себя:

  1. Использование EZAPI для программной генерации пакетов служб SSIS с простым потоком данных. Извлекаемые таблицы и столбцы будут взяты из тех же таблиц метаданных, которые упоминались ранее.
  2. Приобретение стороннего программного обеспечения (компонент динамического потока данных)

Каков наилучший способ приблизиться к этому? Когда дело доходит до программирования на .NET, я начинающий, поэтому время, необходимое для ознакомления с основами, также вызывает беспокойство.


1
Поскольку все 225 баз данных имеют одинаковую схему, возможно ли поддерживать представление, объединяющее данные из всех 225 баз данных и указывающее на это пакет служб SSIS? Несмотря на то, что это может показаться инструментом затухания и не обязательно будет работать волшебным образом, управлять им гораздо проще, чем 225 пакетами служб SSIS (даже если вы управляете некоторой автоматизацией там). Вы также можете пойти наполовину и построить представление для каждого набора баз данных, например, баз данных 1-25, 26-50, 51-75 и т. Д.
Аарон Бертран

Базы данных находятся на нескольких серверах, что, я думаю, усложняет ситуацию. На самом деле я пытался создать представление разных таблиц в своем окне разработки для 225 баз данных, и чтение данных было мучительно медленным.
8kb

1
Ну, вы бы хотели, чтобы представление только ссылалось на базы данных на одном сервере. И снова, одно представление против всех 225 таблиц не будет работать волшебным образом, но я думаю, что вы все еще можете разделить и победить и не иметь 225 потоков данных.
Аарон Бертран

Ответы:


12

Я не хотел бы иметь 200 потоков данных в одном пакете. Время, которое потребуется, чтобы просто открыть и проверить, сделает вас старым раньше времени.

EzAPI - это весело, но если вы новичок в .NET и SSIS, черт возьми, вы этого не хотите. Я думаю, что вы потратите гораздо больше времени на изучение объектной модели служб SSIS и, возможно, работы с COM, чем на самом деле выполняете работу.

Поскольку я ленивый, я подключу BIML как бесплатную опцию, которую вы не перечислили. Из ответа на SO /programming/13809491/generating-several-s Similar- ssis- packages- file- data- source- to- db/ 13809604# 13809604

  • Бимл интересный зверь. Varigence с радостью продаст вам лицензию на Mist, но она не нужна. Все, что вам нужно, это BIDSHelper, а затем просмотрите BimlScript и найдите рецепт, который соответствует вашим потребностям. Как только вы это сделаете, нажмите кнопку контекстно-зависимого меню в BIDSHelper, и он создаст пакеты.

Я думаю, что это может быть подходом и для вас. Вы определяете свой BIML, который описывает, как должны вести себя ваши пакеты, а затем генерируете их. В сценарии вы описываете, где вы вносите изменения, и вам нужно исправить N пакетов, нет, вы исправляете свое определение проблемы и перегенерируете пакеты.

Или, если вы достаточно хорошо знакомы с фреймворком, используйте что-то вроде EzAPI, чтобы исправить и исправить все испорченные вещи. Черт возьми, так как вы пометили это как 2005, вы также можете попробовать PacMan, если вам нужно массово модифицировать существующие пакеты.

Особенности проектирования служб SSIS

Вообще говоря, я стараюсь сосредоточить свои пакеты на решении одной задачи (загрузить данные о продажах). Если для этого требуется 2 потока данных, пусть будет так. Ненавижу наследовать - это пакет из мастера импорта-импорта со множеством несвязанных потоков данных в одном пакете. Разложите их в нечто, что решает очень специфическую проблему. Это делает будущие улучшения менее рискованными, так как площадь поверхности уменьшается. Дополнительным преимуществом является то, что я могу работать над загрузкой, DimProductsпока мой миньон занимается загрузкой SnowflakeFromHellпакета.

Затем используйте главный пакет (ы) для организации дочерних рабочих процессов. Я знаю, что вы на 2005, но выпуск SSIS для SQL Server 2012 - это кошачья пижама. Мне нравится модель развертывания проекта и тесная интеграция между пакетами.

TSQL против SSIS (моя история)

Что касается подхода чистого TSQL, в предыдущем задании они использовали задание из 73 шагов для репликации всех своих данных Informix в SQL Server. Обычно это занимает около 9 часов, но может растянуться до 12 или около того. После того, как они купили новый SAN, он снизился до 7+ часов. Тот же самый логический процесс, переписанный в SSIS, был последовательным саб-2 часа. Безусловно, самым большим фактором сокращения времени стало «бесплатное» распараллеливание, которое мы получили с помощью SSIS. Задание агента выполняло все эти задачи последовательно. Основной пакет в основном разделил таблицы на блоки обработки (5 параллельных наборов сериализованных задач «запустить реплицируемую таблицу 1», таблицу 2 и т. Д.), Где я попытался разделить сегменты на квази равные по размеру единицы работы. Это позволило приблизительно 60 справочным таблицам поиска быстро заполниться, и затем обработка замедлилась, когда она попала в "

Еще один плюс для меня, использующего SSIS, заключается в том, что я получаю «бесплатную» конфигурацию, ведение журнала и доступ к библиотекам .NET для квадратных данных, которые мне нужно врезать в круглое отверстие. Я думаю, что легче поддерживать (передать обслуживание) пакет служб SSIS, чем чистый подход TSQL, благодаря графической природе зверя.

Как всегда, ваш пробег может отличаться.


BIML выглядит очень интересно. Я также рассматривал возможность создания каждого потока данных в виде отдельного пакета, а затем их вызова через мастер-пакет. Как вы думаете, это лучше? Также любопытно, если у вас есть мнение о подходе T-SQL. Это медленнее, но я проверил это, и это будет работать.
8kb

Я обновил свой ответ с мыслями о дизайне и чистом подходе tsql ETL
billinkc

0

Вы упомянули, что у вас есть 200 исходных таблиц и 225 баз данных. Я предполагаю, что 200 исходных таблиц - это число всех таблиц из всех 225 баз данных (потому что, если у вас было 200 таблиц в каждой базе данных, общее число таблиц будет равно 45000). Вы также упомянули, что схема базы данных одинакова для 225 баз данных.

Вы можете сначала создать пакеты служб SSIS только для 1 базы данных, а затем при планировании своих заданий вы можете просто изменить строку подключения к базе данных, используя конфигурацию пакета (если вы используете SQL 2005, то вы будете использовать модель развертывания пакета). Как упоминалось в предыдущих ответах, в SQL 2012 появились новые способы настройки параметров с использованием модели развертывания проекта.

Вы можете получить больше информации о конфигурации пакета с SSIS здесь http://www.sql-server-performance.com/2007/package-configuration-2005/

Вы можете получить более подробную информацию об использовании параметров проекта здесь, /programming/15206184/how-to-configure-ssis-2012-project-to-run-under-different-environment-configurat

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.