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ą:
- 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.
- 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.
Odpowiedzi:
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
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,
DimProducts
podczas gdy mój stwór zajmuje się ładowaniemSnowflakeFromHell
paczki.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ć.
źródło
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
źródło