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 базах даних, і читання даних було болісно повільним.
8 кб

1
Добре, ви хочете лише переглядати посилання на бази даних на одному сервері. І знову: єдиний погляд на всі 225 таблиць не буде магічно працювати, але я думаю, ви все ще можете розділити і перемогти і не мати 225 потоків даних.
Аарон Бертран

Відповіді:


12

Я не хотів би мати 200 потоків даних в одному пакеті. Час, який знадобиться лише для того, щоб відкритись та перевірити, зробить вас старим до свого часу.

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

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

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

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

Або якщо ви достатньо ознайомилися з рамкою, тоді використовуйте щось на зразок EzAPI, щоб виправити всі зламані речі. Отож, оскільки ви позначили це як 2005 року, ви також можете спробувати PacMan, якщо вам потрібно зробити масові модифікації існуючих пакетів.

Міркування щодо SSIS

Взагалі кажучи, я намагаюся зосередити свої пакети на вирішенні однієї задачі (завантаження даних про продажі). Якщо для цього потрібні два потоки даних, так і нехай буде. Ненавиджу наслідування - це пакет від майстра експорту експорту з багатьма непов'язаними потоками даних в одному пакеті. Розкладіть їх на щось, що вирішує дуже конкретну проблему. Це робить майбутні удосконалення менш ризиковими, оскільки площа поверхні зменшується. Додатковою перевагою є те, що я можу працювати над завантаженням, DimProductsпоки мій мійон займається завантаженням SnowflakeFromHellпакету.

Потім використовуйте основні пакунки, щоб організувати робочі потоки дитини. Я знаю, що ви 2005 року, але випуск SSIS SQL Server 2012 - це котяча піжама. Мені подобається модель розгортання проекту та тісна інтеграція, яку він дозволяє між пакетами.

TSQL vs SSIS (моя історія)

Що стосується чистого підходу TSQL, то в попередньому завданні вони використовували 73-крокове завдання для реплікації всіх своїх даних Informix у SQL Server. Зазвичай це займало близько 9 годин, але може розтягнутися на 12 або близько того. Після того, як вони купили новий SAN, він знизився приблизно до 7+ годин. Той самий логічний процес, переписаний в SSIS, був послідовним 2 години. Найбільшим фактором, що зменшив цей час, була "вільна" паралелізація, яку ми отримали за допомогою SSIS. Завдання агента виконувало всі ці завдання послідовно. Основний пакет в основному розділив таблиці на одиниці обробки (5 паралельних наборів серіалізованих завдань "запустити повторну таблицю 1", таблицю 2 тощо), де я намагався розділити відра на квазі рівні одиниці роботи. Це дозволило 60 або близько довідкових таблиць пошуку швидко заповнитись, а потім обробка сповільнилася, коли вона потрапила в "

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

Як завжди, пробіг може відрізнятися.


BIML виглядає дуже цікаво. Я також розглядав можливість створення кожного потоку даних як окремого пакету, а потім викликав їх через основний пакет. Ви вважаєте, що це краще? Також цікаво, якщо у вас є думка щодо T-SQL підходу. Це повільніше, але я перевірив це, і він буде працювати.
8кб

Я оновив свою відповідь думками щодо дизайну та чистого підходу ETL
tsql

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.