ETL: wyodrębnianie z 200 tabel - przepływ danych SSIS czy niestandardowy T-SQL?

12

Na podstawie mojej analizy kompletny model wymiarowy dla naszej hurtowni danych będzie wymagał ekstrakcji z ponad 200 tabel źródłowych. Niektóre z tych tabel zostaną wyodrębnione w ramach obciążenia przyrostowego, a inne będą obciążeniem pełnym.

Należy zauważyć, że mamy około 225 źródłowych baz danych o tym samym schemacie.

Z tego, co widziałem, zbudowanie prostego przepływu danych w SSIS ze źródłem OLE DB i miejscem docelowym OLE DB wymaga określenia kolumn i typów danych w czasie projektowania. Oznacza to, że w końcu skończę z ponad 200 przepływami danych tylko dla samej ekstrakcji.

Z punktu widzenia łatwości konserwacji jest to dla mnie duży problem. Gdybym musiał wprowadzić jakąś szeroką zmianę w kodzie ekstrakcji, musiałbym zmodyfikować 200 różnych przepływów danych.

Alternatywną opcją jest napisanie małego skryptu, który odczytuje źródłowe bazy danych, nazwy tabel i kolumny, które chcę wyodrębnić z zestawu tabel metadanych. Kod działa w wielu pętlach i używa dynamicznego SQL do wyodrębnienia z tabel źródłowych za pośrednictwem połączonego serwera i OPENQUERY.

Na podstawie moich testów nadal nie jest to tak szybkie, jak przy użyciu przepływu danych SSIS ze źródłem i miejscem docelowym OLEDB. Zastanawiam się więc, jakie mam alternatywy. Dotychczasowe myśli obejmują:

  1. Użycie EZAPI do programowego generowania pakietów SSIS przy prostym przepływie danych. Tabele i kolumny do wyodrębnienia pochodzą z tych samych tabel metadanych, które wspomniano wcześniej.
  2. Kup oprogramowanie innej firmy (komponent dynamicznego przepływu danych)

Jak najlepiej to podejść? Jeśli chodzi o programowanie .NET, jestem początkującym, więc czas potrzebny na rozwinięcie się tylko z podstawami jest również problemem.

8kb
źródło
1
Ponieważ wszystkie 225 baz danych ma ten sam schemat, czy możliwe jest utrzymanie widoku łączącego dane ze wszystkich 225 baz danych i wskazanie na pakiet SSIS? Chociaż może to wydawać się narzędziem do blokowania i niekoniecznie musi działać magicznie, wydaje się, że zarządzanie nim jest łatwiejsze niż 225 pakietów SSIS (nawet jeśli zarządzasz tam pewną automatyzacją). Możesz także przejść do połowy i zbudować widok dla każdego zestawu baz danych, np. Bazy danych 1-25, 26-50, 51-75 itd.
Aaron Bertrand
Bazy danych znajdują się na wielu serwerach, co moim zdaniem czyni je bardziej skomplikowanymi. W rzeczywistości próbowałem utworzyć widok różnych tabel w moim pudełku programistycznym dla 225 baz danych i odczyt danych był boleśnie powolny.
8kb 14.12
1
Cóż, chciałbyś, aby widok odwoływał się do baz danych na tym samym serwerze. I znowu, pojedynczy widok na wszystkie 225 tabel nie będzie działał magicznie, ale myślę, że nadal możesz dzielić i podbijać i nie mieć 225 przepływów danych.
Aaron Bertrand

Odpowiedzi:

12

Nie chciałbym mieć 200 przepływów danych w jednym pakiecie. Czas potrzebny na otwarcie i sprawdzenie sprawiłby, że zestarzejesz się przed czasem.

EzAPI jest fajny, ale jeśli dopiero zaczynasz przygodę z .NET i SSIS, och, cholera nie, nie chcesz tego. Myślę, że poświęcisz znacznie więcej czasu na naukę modelu obiektowego SSIS i być może zajmowanie się COM, niż wykonywanie pracy.

Ponieważ jestem leniwy, podłączę BIML jako bezpłatną opcję, której nie wymieniłeś. Z odpowiedzi na SO /programming/13809491/generating-several-similar-ssis-packages-file-data-source-to-db/13809604#13809604

  • Biml to ciekawa bestia. Varigence chętnie sprzeda licencję Mist, ale nie jest to konieczne. Wszystko czego potrzebujesz to BIDSHelper, a następnie przejrzyj BimlScript i poszukaj przepisu, który zaspokoi Twoje potrzeby. Gdy to zrobisz, kliknij przycisk menu kontekstowego w BIDSHelper i whoosh, generuje pakiety.

Myślę, że to może być również podejście dla ciebie. Zdefiniujesz BIML, który opisuje, jak powinny zachowywać się twoje pakiety, a następnie je wygenerujesz. W scenariuszu opisujesz, gdzie dokonujesz zmiany i musisz naprawić N pakietów, nie, naprawisz definicję problemu i ponownie wygenerujesz pakiety.

Lub jeśli masz wystarczającą znajomość frameworka, użyj czegoś takiego jak EzAPI, aby naprawić wszystkie zepsute rzeczy. Heck, ponieważ oznaczyłeś to jako 2005, możesz również wypróbować PacMan, jeśli potrzebujesz masowych modyfikacji istniejących pakietów.

Zagadnienia dotyczące projektowania SSIS

Mówiąc ogólnie, staram się, aby moje paczki koncentrowały się na rozwiązaniu jednego zadania (załadowanie danych sprzedaży). Jeśli to wymaga 2 przepływów danych, niech tak będzie. Nienawidzę dziedziczenia to pakiet kreatora importu eksportu z wieloma niepowiązanymi przepływami danych w jednym pakiecie. Rozłóż je na coś, co rozwiązuje bardzo specyficzny problem. Dzięki temu przyszłe ulepszenia będą mniej ryzykowne, ponieważ zmniejszy się powierzchnia. Dodatkową korzyścią jest to, że mogę pracować nad ładowaniem, DimProductspodczas gdy mój stwór zajmuje się ładowaniem SnowflakeFromHellpaczki.

Następnie użyj pakietów głównych, aby zorganizować potomne przepływy pracy. Wiem, że masz rok 2005, ale wersja SSIS programu SQL Server 2012 to piżama dla kota. Uwielbiam model wdrażania projektu i ścisłą integrację między pakietami.

TSQL vs SSIS (moja historia)

Jeśli chodzi o podejście oparte wyłącznie na TSQL, w poprzednim zadaniu wykorzystali 73-krokowe zadanie do replikacji wszystkich swoich danych Informix na SQL Server. Zwykle trwało to około 9 godzin, ale mogło rozciągnąć się do około 12 godzin. Po zakupie nowej sieci SAN zmniejszyła się ona do około 7+ godzin. Ten sam logiczny proces, przepisany w SSIS, był konsekwentny przez 2 godziny. Zasadniczo największym czynnikiem ograniczającym ten czas była „darmowa” równoległość, którą uzyskaliśmy za pomocą SSIS. Zadanie agenta uruchamiało wszystkie te zadania szeregowo. Pakiet główny zasadniczo podzielił tabele na jednostki przetwarzania (5 równoległych zestawów serializowanych zadań „uruchom replikację tabeli 1”, tabeli 2 itp.), W których próbowałem podzielić wiadra na quasi równe jednostki pracy. Umożliwiło to szybkie zapełnienie około 60 tabel odnośników, a następnie przetwarzanie zostało spowolnione, gdy pojawiło się w polu „

Inne zalety dla mnie przy korzystaniu z SSIS to to, że dostaję „darmową” konfigurację, logowanie i dostęp do bibliotek .NET dla kwadratowych danych, które muszę uderzyć w okrągły otwór. Myślę, że łatwiej jest utrzymywać (przekazywać konserwację) pakiet SSIS niż czysto podejście TSQL ze względu na graficzną naturę bestii.

Jak zawsze przebieg może się różnić.

billinkc
źródło
BIML wygląda bardzo interesująco. Zastanawiałem się również nad utworzeniem każdego przepływu danych jako osobnego pakietu, a następnie wywołaniem ich za pośrednictwem pakietu głównego. Myślisz, że to jest lepsze? Również ciekawy, czy masz opinię na temat podejścia T-SQL. Jest wolniejszy, ale przetestowałem go i zadziała.
8kb 14.12
Zaktualizowałem swoją odpowiedź przemyśleniami na temat projektowania i podejścia opartego na czystym tsql ETL
billinkc
0

Wspomniałeś, że masz 200 tabel źródłowych i 225 baz danych. Zakładam, że 200 tabel źródłowych to liczba wszystkich tabel ze wszystkich 225 baz danych (bo jeśli w każdej bazie danych było 200 tabel, to całkowita liczba tabel wyniesie 45000). Wspomniałeś również, że schemat bazy danych jest taki sam dla 225 baz danych.

Możesz najpierw zbudować pakiety SSIS tylko dla 1 bazy danych, a następnie, kiedy planujesz swoje zadania, możesz po prostu zmienić parametry połączenia z bazą danych za pomocą konfiguracji pakietu (jeśli masz SQL 2005, wtedy będziesz używać modelu wdrażania pakietu). Jak wspomniano we wcześniejszych odpowiedziach, SQL 2012 ma nowe sposoby konfigurowania parametrów Paremeters przy użyciu modelu wdrażania projektu.

Więcej informacji na temat konfiguracji pakietu za pomocą SSIS można znaleźć tutaj http://www.sql-server-performance.com/2007/package-configuration-2005/

Więcej informacji na temat używania parametrów projektu można znaleźć tutaj: /programming/15206184/how-to-configure-ssis-2012-project-to-run-under-different-environment-configurat

Harb
źródło