Czy programiści powinni używać SSIS, a jeśli tak, to dlaczego? [Zamknięte]


94

Jako programista .NET, z jakich powodów powinienem preferować pakiety SSIS od pisania kodu? Mamy mnóstwo pakietów w produkcji, w których obecnie pracuję i są koszmarem zarówno dla „pisania” (być może rysowania?), Jak i utrzymywania. Każdy pakiet wygląda jak miska wielokolorowego spaghetti ze skryptami C # i VB.NET zmieszanymi w punktach, w których rozkładają się abstrakcje. Aby dowiedzieć się, co robi każde „Wykonaj zadanie SQL” lub „Pętla Foreach”, muszę dwukrotnie kliknąć tę cholerną rzecz i przejrzeć drzewo wartości i wyrażeń dosłownych, rozrzuconych na wielu kartach.

Jestem otwarty, więc chciałbym wiedzieć, czy inni dobrzy programiści uważają, że SSIS jest bardziej produktywne niż zwykłe pisanie kodu. Jeśli uważasz, że SSIS jest bardziej wydajne, proszę powiedz mi, dlaczego.


4
Nie wiem, jak to robi, ale SSIS jest dużo szybsze niż jakikolwiek ręczny kod, który napisałem do tworzenia hurtowni danych. jest to narzędzie zaprojektowane do tego zadania - spróbuj rozbić zadania na pakiety potomne, które są wykonywane z pakietu głównego
Mr Shoubs


5
Właśnie to spotkałem. Pracuję nad utrzymaniem niektórych problematycznych pakietów SSIS i napisałem dekompilator, aby wyodrębnić użyteczną pracę z nich do programu C #. code.google.com/p/csharp-dessist
Ted Spence

5
Z mojego doświadczenia wynika, że ​​SSIS może być bolesne, jeśli masz „długie” i / lub „złożone” napisy lub wiele skryptów. Debugowanie aplikacji konsoli jest znacznie łatwiejsze. W SSIS nie możesz samodzielnie debugować skryptu. Komunikaty o błędach generowane przez skrypt są tajemnicze i nie można zobaczyć dokładnej linii, która spowodowała błąd. IMO, jeśli potrzeby projektu można spełnić za pomocą standardowych komponentów SSIS, SSIS może być drogą do zrobienia. Ale w tym celu musisz znać ograniczenia składników SSIS. Np. To wideo pokazuje, dlaczego „zadanie wysyłania poczty” jest prawie bezużyteczne - youtube.com/watch?v=IlUzkMPYDSk
Steam,

3
to pytanie ma 7 odpowiedzi, więc nie wymagało debaty, kłótni, ankiet ani rozszerzonej dyskusji. Dlaczego nie zostawić tego otwartego?
Michael Freidgeim,

Odpowiedzi:


94

Używam SSIS na co dzień do utrzymywania i zarządzania dużą hurtownią danych i kostką. Od dwóch lat zajmuję się w 100% Business Intelligence i hurtownią danych. Wcześniej przez 10 lat byłem programistą aplikacji .NET.

Wartością SSIS jest mechanizm przepływu pracy służący do przenoszenia danych z jednego miejsca do drugiego, z pewnymi ograniczonymi przekształceniami i rozgałęzieniami warunkowymi po drodze. Jeśli Twoje pakiety zawierają dużo skryptów, oznacza to, że Twój zespół używa SSIS do niewłaściwych zadań lub nie czuje się dobrze z SQL lub wpadł w szum. Pakiety SSIS są bardzo trudne do debugowania. Komponenty skryptów to absolutny koszmar i powinny być używane tylko do formatowania, zapętlania lub jako ostateczność.

  1. Utrzymuj proste pakiety, zadania sql i zadania przepływu danych.
  2. Wykonuj jak najwięcej pracy poza SSIS, najlepiej w języku SQL
  3. Zachowaj zmienne w jednym globalnym zakresie
  4. Przechowuj swój SQL w zmiennych lub przechowuj procedury, nigdy w linii
  5. Przechowuj wartości zmiennych w magazynie konfiguracji, najlepiej w bazie danych SQL

1
Z powodu kłopotów, jakie miałem z SSIS, udzieliłbym bardziej stronniczej odpowiedzi (tak jakbyś nie mógł tego stwierdzić po tonie mojego pytania :)). Dobra odpowiedź, Kevin.
Charles

6
Jak pracowałeś z .NET przez 10 lat, skoro został wydany w 2002 roku?
Brady Holt

7
[cytat] Microsoft rozpoczął prace nad .NET Framework pod koniec lat 90., pierwotnie pod nazwą Next Generation Windows Services (NGWS). Pod koniec 2000 roku ukazały się pierwsze wersje beta .NET 1.0. [/ Quote] W ten sposób prawdopodobnie pracował z wersją beta.
nitefrog

Odpowiedź na pytanie została udzielona w 2010 roku, więc weź dwa lata BI, a następnie kolejne 10 daje 1998, dwa lata przed wersją beta, o której wspominasz. W przeciwnym razie dobra odpowiedź! :)
finoutlook

Tak, globalny zakres ma sens. Jeśli ustawisz go lokalnie i chcesz uzyskać do niego dostęp w innym miejscu, masz problem. Nie można po prostu zmienić zakresu lokalnego na globalny. Zamiast tego musisz dużo klikać i usuwać. Jeśli masz nawet 10-15 mieszkańców, staje się to uciążliwe.
Steam

52

Kilka razy próbowałem używać SSIS i zrezygnowałem z tego. IMO znacznie łatwiej jest po prostu zrobić wszystko, czego potrzebuję w języku C #. SSIS jest zbyt skomplikowane, ma zbyt wiele problemów i po prostu nie jest tego warte. Znacznie lepiej jest poświęcić więcej czasu na doskonalenie umiejętności C # niż na naukę SSIS - uzyskasz znacznie większy zwrot ze swojego szkolenia.

Również znajdowanie i utrzymywanie funkcjonalności w rozwiązaniu VS jest o wiele łatwiejsze. Testowanie jednostkowe za pomocą VS jest łatwe. Wszystko, co muszę zrobić, to sprawdzić źródło w Subversion i sprawdzić, jak zostało załadowane. Testowanie jednostkowe pakietów SSIS jest bardzo skomplikowane, delikatnie mówiąc.

Poza tym zdarzały się sytuacje, w których SSIS po cichu nie wypełniało niektórych kolumn w niektórych wierszach, po prostu pomijając je bez wywoływania wyjątków. Spędziliśmy dużo czasu na rozwiązywaniu problemów i ustalaniu, co się dzieje. Opracowanie alternatywnego rozwiązania w C # zajęło mniej niż godzinę i działa bez żadnych problemów przez dwa lata.


Dzięki za punkty Alex. Oto przykład tego, co moim zdaniem może być problemem - stackoverflow.com/questions/21616435/… .
Steam

2
Czy istnieje lista wszystkich tematów C # / programowania, które deweloper ETL MUSI znać? Na przykład. LINQ, SqlDataReader, DataTable itp. Też uważam, że SSIS nie jest dobre dla złożonych zadań. Jeśli masz łatwy projekt / zadanie typu „kopiuj-wklej”, najlepszym narzędziem może być SSIS.
Steam

@blasto, czy wypróbowałeś Rhino ETL: ayende.com/blog/3102/rhino-etl-2-0
AK,

Alex, odpowiedź Jerome'a ​​zasugerowała również Rhino ETL. Wydaje mi się to niejasne. Więc wahałbym się, czy użyć go z powodu braku dokumentacji, wsparcia i samouczków. Poza tym wygląda na to, że pracuje nad tym tylko jeden programista. To zmniejsza moje zaufanie do narzędzia. Spróbowałbym tego dla zabawy lub z ciekawości, ale nie mogę tego użyć do prawdziwego projektu. Dzięki.
Steam

Jeśli ktoś chce samouczek na temat Rhino ETL (z czystym C #), oto jeden - codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam

14

Moim zdaniem - SSIS jest tylko dla operacji ETL i nie powinno zawierać logiki poza tym zakresem.


8
ETL = Extract Transform Load Load
Christoph,

3
Tak właśnie się czuję. W naszym przypadku używamy SSIS do robienia rzeczy takich jak e-mail (lub SFTP) CSV zawierające informacje o cenach. Rozgałęzienia, osadzone skrypty itp. Są dość okropne. Gdyby tylko przeniesiono jakieś dane za pomocą SSIS, prawdopodobnie nie byłoby tak źle.
Charles

1
Myślę, że twoja odpowiedź mogłaby być głębsza.
Steam

3
Czy T w ETL nie może zawierać logiki? Tylko myśl ...
cs0815

Jeśli jest to związane tylko z kształtowaniem / routingiem danych, to jasne. Ale unikałbym jakiejkolwiek logiki biznesowej.
Christoph,

11

Miałem niefortunne doświadczenie podczas pracy nad projektem, w którym myśleliśmy, że SSIS będzie wystarczająco dobrym rozwiązaniem do agregowania i łączenia danych z kilku źródeł. Niefortunne było to, że na początku działało świetnie, ale potem wymagania się zmieniły i (w końcu) zdaliśmy sobie sprawę, że to niewłaściwe narzędzie.

może po prostu używaliśmy go niepoprawnie, ale mieliśmy wiele trudności, jeśli kiedykolwiek zmieniliśmy nasz schemat i ostatecznie po prostu ponownie wykorzystaliśmy nasze definicje ORM z poziomu interfejsu, aby napisać niestandardowe narzędzie w C #, które to zrobi. Ponieważ mieliśmy już model danych, było to zaskakująco łatwe. oczywiście YMMV i ja w żadnym wypadku nie jestem ekspertem w dziedzinie SSIS, ale w tym jednym przypadku SSIS spowodowało wiele podwójnej pracy i bólów głowy, kiedy po prostu zakasał rękawy i „ręczne kodowanie” było łatwiejsze niż oczekiwano.

Rozważając SSIS, dużo myślałbym o elastyczności.


7
Podzielam niektóre z tych samych uczuć. Łatwo jest refaktoryzować kod ... nie tyle z wizualnym DSL.
Charles

Luke, czy możesz nam przedstawić zarys wymagań swojego projektu? Dzięki.
Steam

@blasto staraliśmy się zintegrować dane z kilku baz danych i użyć niektórych wbudowanych narzędzi do porównywania ciągów probabilistycznych do łączenia danych z różnych systemów (zasadniczo baz danych CRM). To było ponad 5 lat temu, więc nie pamiętam wszystkich szczegółów.
Łukasz

Jeśli prowadzisz sklep .net i zajmujesz się przenoszeniem danych do celów hurtowni danych, usługi SSIS pomogą Ci tylko wtedy, gdy znasz je wystarczająco dobrze. Widziałem wielu ludzi, którzy są guru .net, ale nie potrafią całkowicie zrozumieć SSIS (i nie winię ich). SSIS z pewnością wymaga osoby, która zna go wystarczająco dobrze, w przeciwnym razie skończysz pisanie pakietów, które są nieefektywne i nie mogą zrobić właściwej rzeczy.
rvphx

6

SSIS ma swoje miejsce, a to miejsce nie jest ogólnym programowaniem lub zamiennikiem procedur składowanych. Pochodzi ze szkoły ETL (Extract, Transform, and Load) i na tym polega jego siła.

Stara nazwa (DTS, Data Transformation Services) i nowa nazwa (SSIS, Sql Server Integration Services) wyjaśniają, że jest to usługa (lub zestaw usług) zaprojektowana do manipulowania danymi w celu integracji bazy danych SQL Server z większymi procesami.


Nie rozumiem, jak ta odpowiedź powinna dostać tyle pozytywnych głosów. Nie wspomina, dlaczego SSIS nie może dać Ci mocy języka programowania. To dla mnie bez sensu. Jednym z przykładów sytuacji, w których usługi SSIS nie pasują do języka programowania, jest debugowanie. Najwyraźniej SSIS 2012 to zmienia. Tak więc może być, po prostu może być, narzędzie jest na najlepszej drodze, aby stać się bardziej przyjaznym programistom.
Steam

>> Jeden przykład, w którym SSIS nie pasuje do języka programowania ... Zgadzam się - to nie jest język programowania. To przyzwoite narzędzie ETL.
DaveE,

4

Jeśli chcesz programowo przenieść dane, możesz przyjrzeć się Rhino ETL.

Pracuję również nad własnym frameworkiem, Fluent ETL , ponieważ uważam, że SSIS jest zbyt zaangażowane w proste zadania związane z danymi związanymi z programowaniem, takie jak ładowanie danych testów jednostkowych z pliku CSV.


Rhino ETL jest niejasne i na razie ma tylko 24 pytania dotyczące SO - stackoverflow.com/questions/tagged/rhino-etl . Myślę, że C # byłby wystarczająco dobry dla ETL, jeśli masz wiedzę i doświadczenie.
Steam

1
Czy są jakieś popularne alternatywy dla Rhino ETL?
Steam

3

SSIS nie jest programem. Wiele działań jest szybszych w SSIS, a jako administrator otrzymujesz bardzo ładne szczegółowe informacje o postępie i błędach - co może być bardzo dobre w scenariuszach, które SSIS ma rozwiązać, ponieważ czasami coś idzie nie tak, a administrator potrzebuje dużo Informacja.

Biorąc to pod uwagę, SSIS nie jest tak naprawdę użyteczne, jeśli nie masz rzeczy, które same się wyjaśniają - są przeznaczone do czegoś, zbyt wiele w programowaniu ogólnym sprawia, że ​​mają pecha.


2
Czy możesz podać przykład, jak SSIS może przyspieszyć rozwój w jednym scenariuszu i spowolnić w innych?
Steam
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.