Czy w SQL Server istnieje standardowy język / interfejs dla programistycznego ETL?

10

Obecnie jestem w trakcie tworzenia ETL dla naszej hurtowni danych. Używamy SSIS 2008, ale napotykamy problemy, z których największą jest trudność w ponownym użyciu komponentów. Mamy osobne pakiety dla każdej tabeli i każdy pakiet przyjmuje jako dane wejściowe pewną liczbę zmiennych z pakietu nadrzędnego. Gdy wprowadzamy zmiany do tych zmiennych wejściowych, musimy wejść do każdego pakietu (mamy już około 15, ale liczba ta znacznie wzrośnie) i zmodyfikować pakiet, aby poradzić sobie z tymi zmianami. Istnieją również inne problemy, w tym niemożność uruchomienia dowolnego kodu SQL w celu wyodrębnienia, słabe możliwości rejestrowania itp.

Cały ten proces byłby o wiele bardziej niezawodny, gdyby istniał sposób opracowania naszych ETL w kodzie, umożliwiając ponowne użycie kodu, wspólne biblioteki, lepsze testy jednostkowe itp. Czy istnieje de facto standardowy język / API ETL dla SQL Server? Staram się unikać narzędzi GUI w jak największym stopniu.

Edycja: Powinienem wspomnieć o moim pochodzeniu. Nie jestem DBA i nie mam formalnego (lub nieformalnego) szkolenia DBA, w zasadzie zorientowałem się, jak to postępowałem, więc istnieje prawdopodobieństwo, że próbuję robić niewłaściwe rzeczy z SSIS lub zbliżam się do ETL projekt pod niewłaściwym kątem. Ponadto jestem obecnie zatrudniony w rządzie stanowym, więc wszelkie rozwiązania wymagające zakupu nowego pakietu oprogramowania nie wchodzą w zakres możliwości.


Oto jedno z naszych zadań. Używamy jednego pakietu SSIS do załadowania każdego stołu w naszym magazynie. Każdy pakiet faktów i pakiet wymiarów są ogólnie takie same, różnią się tylko

  • Wyciągi ze źródłowej bazy danych
  • Manipulacje w przepływie danych
  • Scala się z tabelą docelową

Co chciałbym być w stanie zrobić (co wydaje mi się trudne w SSIS)

  • Załaduj zapytanie dotyczące wyodrębnienia z pliku tekstowego. Gdy programiści piszą i testują swoje zapytania dotyczące wyodrębniania, nie powinienem w żaden sposób manipulować ich zapytaniem przed uruchomieniem go przez SSIS i nie powinienem wycinać i wklejać zapytania do obiektu źródłowego DB.
  • Przetestuj każdy element indywidualnie. Powinienem być w stanie przetestować cały proces ETL dla pojedynczej tabeli w izolacji, niezależnie od innych obciążeń tabeli.
  • Dokonaj modyfikacji wspólnej logiki w jednym miejscu, bez konieczności edytowania poszczególnych pakietów. Każdy pakiet ładuje dane do tabel audytu w ten sam sposób, jeśli chcę zmienić ładowane dane poddane audytowi, nie chcę edytować wszystkich 15 pakietów (liczba ta z czasem będzie znacznie większa).

Cały proces wydaje się łatwiejszy do zaimplementowania i bardziej niezawodny, jeśli zostanie wykonany programowo przy odpowiednim użyciu współdzielonego kodu.

kubi
źródło
4
NIE jestem bardzo dużym użytkownikiem SSIS, ale rozumiem tutaj postrzeganie stromej krzywej uczenia się. Zachęcam do obejrzenia niektórych filmów / blogów Andy'ego Leonarda, Jamiego Thompsona, Briana Knighta, którzy są ekspertami w tej dziedzinie i uzyskają wskazówki. Zajrzyj na stronę sqlpass.org, aby zobaczyć bezpłatne filmy ze szczytu Pass & sqlblog.com, pragmaticworks.com
Sankar Reddy
Nie wierzę, że krzywa uczenia się jest problemem. Wiem, jak wykonywać zadania, które chcę wykonywać w SSIS. Patrzę na nowy proces, ponieważ rozwiązania, które znalazłem, są powtarzalne, delikatne i niepotrzebnie złożone.
kubi
Kubi, jeśli możesz dodać szczegóły, do których składników się odnosisz, przyprowadzę kogoś, kto będzie w stanie odpowiedzieć na to za ciebie. W tej chwili twoje pytanie jest zbyt ogólne, aby odpowiedzieć.
Sankar Reddy
4
@kubi - dotknąłeś jednego z brudnych sekretów branży BI. Narzędzia ETL są bardzo, bardzo słabe w abstrakcji i logice wielokrotnego użytku. W rezultacie skalują się bardzo słabo wraz ze wzrostem złożoności domen.
ConcernedOfTunbridgeWells
1
Mam dość dobrą władzę, że około połowa klientów określonego branżowego produktu pionowego dla bankowości i ubezpieczeń (dokonanego przez firmę, o której słyszałeś i do której zwykle odnosi się określony kolor), podejmuje wyraźną decyzję techniczną, aby zbudować swoją Właśnie dlatego przetwarzanie ETL w procedurze przechowywanej.
ConcernedOfTunbridgeWells

Odpowiedzi:

6

Po przeczytaniu tego od razu pomyślałem o poleceniu narzędzi Varigence. Widzę jednak, że jeden z głównych architektów Varigence, John Welch, przybył tu przede mną.

Narzędzia Varigence to warstwa abstrakcji powyżej SSIS. Zaletą tego jest możliwość definiowania „rzeczy” wielokrotnego użytku, zapewniając w ten sposób spójność wielu pakietów. Ty definiujesz, w jaki sposób powinny być zbudowane pakiety i jak różnią się one indywidualnie - „skompilowane” dane wyjściowe z narzędzi Varigence to pakiety SSIS.

Pomyśl o tym jak o dynamicznym SQL dla pakietów SSIS. Z GUI. Naprawdę bardzo fajnie.

Jamiet
źródło
3

Próbowałem używać SSIS kilka razy i zrezygnowałem z niego. IMO o wiele łatwiej jest zrobić wszystko, czego potrzebuję w C #. SSIS jest zbyt skomplikowany, ma zbyt wiele gotchas i po prostu nie jest tego wart. O wiele lepiej jest spędzać więcej czasu na doskonaleniu umiejętności C # niż spędzać ten sam czas na nauce SSIS - uzyskasz znacznie większy zwrot z treningu. Nie muszę tu szczegółowo wchodzić w szczegóły - Ayende napisała świetne podsumowanie, do którego nie mam nic do dodania .

Również znalezienie i utrzymanie 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 się ładuje. Testy jednostkowe pakietów SSIS są bardzo zaangażowane, delikatnie mówiąc.

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

Także Rhino ETL wydaje się być naprawdę fajne.

Było kilka podobnych dyskusji na temat przepełnienia stosu .

AK
źródło
2

Osobiście obsługuję jak najwięcej procesów ETL w SQL. Używam SSIS do importowania z nieparzystych źródeł danych, takich jak strony FTP lub Excel, ale to po prostu, aby uzyskać surowe dane do bazy danych, gdzie SQL zajmuje się resztą.

Moja obecna sytuacja jest stosunkowo prosta, ponieważ większość danych znajduje się w innych bazach MS SQL, z którymi mogę skonfigurować połączone serwery. Jeśli musisz połączyć się z innymi platformami, zalecamy użycie OPENQUERYi BULK INSERT. W razie potrzeby można je konstruować programowo, a między nimi mogą łączyć się z większością typów danych.

Używam SQL, ponieważ to, co wiem najlepiej, ale ma pewne obiektywne zalety. Co najważniejsze, jest już używany: nie trzeba się uczyć ani płacić za nowe narzędzie. Jest to powszechnie dostępna umiejętność, która powinna mieć znaczenie dla twojego szefa, jeśli nie dla ciebie. Ponieważ działa w bazie danych, logowanie jest łatwe. Opiera się na zwykłym kodzie tekstowym, więc można go łatwo wyszukiwać i działa dobrze z kontrolą źródła. Jest bardzo stabilny, z bardzo małą szansą na zmianę przez dostawcę i zerwanie wstecznej kompatybilności. Prawdopodobnie jest co najmniej tak szybki jak jakikolwiek język RBAR.

Jeśli potrzebujesz więcej, polecam .NET, choćby dlatego, że jest używany w SSIS i SQLCLR. Używam aplikacji C # do zarządzania całym procesem ETL - rozpoczynając podetapy, monitorując ich wyniki, wysyłając e-maile. Ale prawie wszystko to można zrobić za pomocą agenta SQL, dbmail itp.

Czy jest jakiś powód, dla którego nie można używać SQL do ETL? Czego ci nie udało się zrobić?

Jon of All Trades
źródło
Rzeczywiście, używamy SSIS do zrzucania surowych danych do baz danych Temp, a następnie używamy TSQL, aby zdefiniować, w jaki sposób chcemy je T i L.
Paul