Чи повинні програмісти використовувати SSIS, і якщо так, то чому? [зачинено]


94

Як розробник .NET, з яких причин я повинен віддавати перевагу пакетам SSIS перед написанням коду? У нас є тонна пакетів на виробництві, де я зараз працюю, і вони кошмарують як „писати” (можливо, малювати?), Так і підтримувати. Кожен пакет виглядає як чаша різнокольорових спагетті зі змішаними сценаріями C # та VB.NET у місцях, де абстракції руйнуються. Щоб зрозуміти, що робить кожне "Виконання SQL-завдання" або "Foreach Loop", мені потрібно двічі клацнути цю прокляту річ і переглянути дерево буквальних значень і виразів, розподілених по декількох вкладках.

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


4
не знаю, як це робиться, але SSIS набагато швидший за будь-який ручний код, який я написав для створення сховища даних. це інструмент, призначений для роботи - спробуйте розбити завдання на дочірні пакети, які виконуються з головного пакета
пан Шушс

1
Посилання на подібне запитання: stackoverflow.com/q/690123/327165
Ілля Бердичевський

5
Щойно натрапив на це. Я працюю над підтримкою деяких проблемних пакетів SSIS і написав декомпілятор, щоб витягти з них корисну роботу в програму C #. code.google.com/p/csharp-dessist
Тед Спенс,

5
З мого досвіду, SSIS може бути болючим, якщо у вас є "довгі" та / або "складні" скрипти або багато сценаріїв. Налагодження консольного додатка набагато простіше. У SSIS ви не можете самостійно налагодити свій сценарій. Повідомлення про помилки, вироблені через сценарій, є загадковими, і ви не можете побачити точний рядок, що спричинив помилку. ІМО, якщо потреби проекту можуть бути задоволені стандартними компонентами SSIS, тоді SSIS - це, можливо, шлях. Але для цього вам потрібно знати обмеження компонентів SSIS. Наприклад, це відео показує, чому "завдання надсилати пошту" майже марне - youtube.com/watch?v=IlUzkMPYDSk
Steam

3
це питання має 7 відповідей, тому воно не вимагало дебатів, аргументів, опитування чи розширеного обговорення. Чому б не тримати його відкритим?
Michael Freidgeim

Відповіді:


94

Я використовую SSIS щодня для обслуговування та управління великим сховищем даних та кубом. Я вже два роки займаюся 100% бізнес-аналітикою та зберіганням даних. До цього я був розробником програми .NET протягом 10 років.

Значення SSIS - це механізм робочого процесу для переміщення даних з одного місця в інше, можливо, з деяким обмеженим перетворенням та умовним розгалуженням. Якщо ваші пакунки містять багато сценаріїв, тоді ваша команда використовує SSIS для неправильних завдань, або не влаштовує SQL, або придбала хайп. Пакети SSIS дуже важко налагодити. Компоненти сценарію є абсолютним кошмаром і повинні використовуватися лише для форматування, циклу або в крайньому випадку.

  1. Зберігайте свої пакети простими, завданнями sql та завданнями потоку даних.
  2. Робіть якомога більше роботи поза SSIS, бажано в SQL
  3. Зберігайте свої змінні в єдиному глобальному масштабі
  4. Зберігайте свій SQL у змінних або зберігайте процедури, ніколи не в рядку
  5. Зберігайте значення змінних у сховищі конфігурацій, бажано базі даних SQL

1
Зі своїми проблемами, пов’язаними з SSIS, я дав би більш упереджену відповідь (як би ви не могли визначити з тональності мого запитання :)). Приємна відповідь, Кевіне.
Чарльз,

6
Як ви працювали з .NET протягом 10 років, якщо він вийшов у 2002 році?
Brady Holt

7
[quote] Microsoft розпочала розробку .NET Framework наприкінці 1990-х років, спочатку під назвою Служби Windows наступного покоління (NGWS). Наприкінці 2000 року були випущені перші бета-версії .NET 1.0 [/ quote] Ось так він, ймовірно, працював із бета-версією.
nitefrog

На запитання було дано відповідь у 2010 році, тож зніміть дворічний BI, а потім ще 10 - 1998, за два роки до того, як ви згадали бета-версію. В іншому випадку, хороша відповідь! :)
finoutlook

Так, глобальний обсяг має сенс. Якщо ви робите його локальним і хочете отримати доступ до нього в іншому місці, тоді у вас проблема. Ви не можете просто змінити область локальної на глобальну. Натомість вам доведеться багато кліків та видалень. Якщо у вас є навіть 10-15 місцевих жителів, це стає болем.
Steam

52

Я кілька разів намагався використовувати SSIS і відмовився від нього. ІМО набагато простіше просто зробити все, що мені потрібно в C #. SSIS занадто складний, у нього занадто багато помилок, і це просто не варто. Набагато краще витрачати більше часу на вдосконалення навичок C #, ніж витрачати той самий час на вивчення SSIS - ви отримаєте набагато більше віддачі від свого навчання.

Також знайти та підтримувати функціональність рішення VS набагато простіше. Модульне тестування за допомогою VS легко. Все, що мені потрібно зробити, це перевірити джерело в Subversion і перевірити, як воно завантажилося. Модульне тестування пакетів SSIS, м’яко кажучи, дуже задіяне.

Крім того, траплялися ситуації, коли SSIS мовчки не могла заповнювати деякі стовпці в деяких рядках, просто пропускаючи їх, не створюючи винятків. Ми витратили багато часу на усунення несправностей та з’ясування того, що відбувається. Розробка альтернативного рішення на C # зайняла менше години і працює без проблем два роки.


Дякую за очки Алекс. Ось приклад того, що, на мою думку, може бути проблемою - stackoverflow.com/questions/21616435/… .
Steam

2
Чи існує перелік усіх тем програмування на C # /, які ПОВИНЕН знати розробник ETL? Напр. LINQ, SqlDataReader, DataTable тощо. Я теж вважаю, що SSIS не підходить для складних завдань. Якщо у вас є простий проект / завдання "скопіювати-вставити", тоді SSIS може бути найкращим інструментом.
Steam

@blasto ви пробували Rhino ETL: ayende.com/blog/3102/rhino-etl-2-0
AK

Алекс, відповідь Джерома також запропонував Rhino ETL. Мені це здається незрозумілим. Тож я б вагався використовувати його через відсутність документації, підтримки та навчальних посібників. До того ж, схоже, над цим працює лише один розробник. Це зменшує мою впевненість в інструменті. Я спробував би це заради забави чи з цікавості, але я не можу використовувати це для реального проекту. Дякую.
Steam

Якщо хтось хоче підручник з Rhino ETL (з чистим C #), ось один - codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam

14

На мій погляд - SSIS призначений лише для операцій ETL і не повинен містити жодної логіки поза цим обсягом.


8
ETL = Витяг трансформаційного навантаження
Крістоф

3
Це майже те, що я відчуваю. У нашому випадку ми використовуємо SSIS для роботи з такими матеріалами, як CSV-файли електронної пошти (або SFTP), що містять інформацію про ціни. Розгалуження, вбудовані скрипти тощо дуже жахливі. Якщо просто перемістити деякі дані за допомогою SSIS, це, мабуть, було б не так погано.
Чарльз

1
Я думаю, що ваша відповідь може мати трохи більше глибини.
Steam

3
Чи може Т в ETL не містити певної логіки? Просто думка ...
cs0815

Якщо це стосується лише формування / маршрутизації даних, звичайно. Але я б уникав будь-якої ділової логіки.
Крістоф,

11

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

можливо, ми просто використовували його неправильно, але у нас було багато труднощів, якщо ми коли-небудь змінювали нашу схему, і врешті-решт ми просто використовували наші визначення ORM з інтерфейсу, щоб написати власний інструмент в C # для цього. Оскільки ми вже мали модель даних, це було напрочуд легко. очевидно YMMV, і я ні в якому разі не є експертом SSIS, але в цьому одному випадку SSIS викликав багато дублюючих робіт та головних болів, коли просто закатавши рукави та "ручне кодування" було простіше, ніж очікувалося.

Тому я б багато думав про гнучкість, розглядаючи SSIS.


7
Я поділяю одні й ті ж почуття. Легко рефакторировать код ... не стільки за допомогою візуального DSL.
Чарльз

Люк, чи не можеш ти дати нам короткий опис вимог до свого проекту? Дякую.
Steam

@blasto ми намагалися інтегрувати дані з декількох баз даних і використовувати деякі вбудовані утиліти збігу ймовірнісних рядків для об'єднання даних з різних систем (по суті, баз даних CRM). Це було 5+ років тому, тому я не пам’ятаю всіх деталей.
luke

Якщо ви є .net-магазином і берете участь у переміщенні даних для зберігання даних, SSIS допоможе вам лише у тому випадку, якщо ви це знаєте досить добре. Я бачив багато людей, які є .net-гуру, але не розуміють повністю SSIS (і я не звинувачую їх). Упевнений SSIS вимагає від людини, яка це досить добре знає, інакше ви в кінцевому підсумку напишете неефективні пакети і не зможете зробити правильно.
rvphx

6

SSIS має своє місце, і це місце не є загальним програмуванням або заміною збереженим процедурам. Він походить зі школи ETL (Витяг, Трансформація та Навантаження), і саме тут його напрямок.

Старе ім'я (DTS, Служба перетворення даних) і нове ім'я (SSIS, Служби інтеграції серверів Sql) однозначно дають зрозуміти, що це послуга (або набір служб), призначена для маніпулювання даними для інтеграції бази даних SQL Server у великі процеси.


Я не розумію, як ця відповідь повинна набрати стільки голосів. Це не згадує, чому SSIS не може надати вам силу мови програмування. Для мене це не має сенсу. Одним із прикладів, коли SSIS не відповідає мові програмування, є налагодження. Очевидно, SSIS 2012 це змінює. Отже, можливо, просто може бути, інструмент на шляху до того, щоб стати більш зручним для програмістів.
Steam

>> Один приклад, коли SSIS не відповідає мові програмування ... Я згоден - це не мова програмування. Це гідний інструмент ETL.
DaveE

4

Якщо ви хочете перемістити дані програмно, ви можете подивитися на Rhino ETL.

Я також працюю над власним фреймворком, Fluent ETL , оскільки вважаю, що SSIS занадто задіяний для простих завдань, пов'язаних з розробкою даних, таких як завантаження тестових даних з файлу CSV.


Rhino ETL неясний і на сьогодні має лише 24 запитання щодо SO - stackoverflow.com/questions/tagged/rhino-etl . Я думаю, що C # був би досить хорошим для ETL, якщо у вас є знання та досвід.
Steam

1
Чи є якісь популярні альтернативи Rhino ETL?
Steam

3

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

Тим не менш, SSIS насправді не такий корисний, якщо у вас немає матеріалів, які можна пояснити самостійно - вони призначені для чогось, занадто багато загального програмування робить їх неприємними.


2
Чи можете ви дати нам приклад того, як SSIS може пришвидшити розвиток в одному сценарії, а повільно в інших?
Steam
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.