Ich bin gerade dabei, ETLs für unser Data Warehouse zu erstellen. Wir verwenden SSIS 2008, stoßen jedoch auf Probleme, von denen das größte die Schwierigkeit ist, Komponenten wiederzuverwenden. Wir haben separate Pakete für jede Tabelle und jedes Paket verwendet eine Reihe von Variablen aus einem übergeordneten Paket als Eingabe. Wenn wir Änderungen an diesen Eingabevariablen vornehmen, müssen wir in jedes Paket gehen (wir haben jetzt ungefähr 15, aber diese Anzahl wird erheblich zunehmen) und das Paket ändern, um diese Änderungen zu bewältigen. Es gibt auch andere Probleme, einschließlich der Unfähigkeit, beliebiges SQL für unsere Extraktion auszuführen, schlechte Protokollierungsfunktionen usw.
Dieser gesamte Prozess wäre viel robuster, wenn es eine Möglichkeit gäbe, unsere ETLs im Code zu entwickeln, um die Wiederverwendung von Code, gemeinsame Bibliotheken, bessere Komponententests usw. zu ermöglichen. Gibt es eine De-facto- Standard-ETL-Sprache / API für SQL Server? Ich versuche, GUI-Tools so weit wie möglich zu vermeiden.
Edit: Ich sollte meinen Hintergrund erwähnen. Ich bin kein DBA und habe kein formelles (oder informelles) DBA-Training. Ich habe dieses Zeug im Laufe der Zeit im Grunde genommen herausgefunden, daher besteht jede Wahrscheinlichkeit, dass ich versuche, unangemessene Dinge mit SSIS zu tun oder mich dieser ETL zu nähern aus dem falschen Winkel projizieren. Außerdem bin ich derzeit in der Landesregierung beschäftigt, sodass Lösungen, die den Kauf eines neuen Softwarepakets erfordern, nicht in den Bereich der Möglichkeiten fallen.
Hier ist eine unserer Aufgaben. Wir verwenden ein einzelnes SSIS-Paket, um jede Tabelle in unser Lager zu laden. Jedes Fact-Paket und Dimension-Paket sind im Allgemeinen gleich und unterscheiden sich nur in
- Auszüge aus der Quellendatenbank
- Manipulationen in einem Datenfluss
- Wird in die Zieltabelle eingefügt
Was ich gerne tun würde (was ich in SSIS als schwierig empfinde)
- Laden Sie die Extraktionsabfrage aus einer Textdatei. Wenn Entwickler ihre Extraktionsabfragen schreiben und testen, sollte ich ihre Abfrage in keiner Weise bearbeiten müssen, bevor SSIS sie ausführt, und ich sollte die Abfrage nicht ausschneiden und in ein DB-Quellobjekt einfügen müssen.
- Testen Sie jede Komponente einzeln. Ich sollte in der Lage sein, den gesamten ETL-Prozess für eine einzelne Tabelle isoliert zu testen, unabhängig von anderen Tabellenlasten.
- Nehmen Sie Änderungen an der gemeinsam genutzten Logik an einem Ort vor und müssen Sie nicht jedes einzelne Paket bearbeiten. Jedes Paket lädt Daten auf die gleiche Weise in die Audit-Tabellen. Wenn ich die geladenen Auditedaten ändern möchte, muss ich nicht alle 15 Pakete bearbeiten müssen (diese Anzahl wird mit der Zeit viel größer).
Der gesamte Prozess scheint viel einfacher zu implementieren und robuster zu sein, wenn er programmgesteuert mit der richtigen Verwendung von gemeinsam genutztem Code durchgeführt wird.
quelle
Antworten:
Es gibt ein Tool, das dies ermöglicht - http://www.varigence.com/products/biml.html
Es gibt eine kommerzielle Version, aber wir haben auch einige der BIML-Funktionen in BIDS Helper, einem kostenlosen Tool, integriert. http://bidshelper.codeplex.com/
Gerne beantworte ich Ihre Fragen dazu.
Dies ist ein Tool, das mein Unternehmen bereitstellt.
quelle
Als ich dies las, dachte ich sofort daran, die Tools von Varigence zu empfehlen. Ich sehe jedoch, dass einer der Chefarchitekten von Varigence, John Welch, vor mir hierher gekommen ist.
Die Tools von Varigence sind eine Abstraktionsschicht über SSIS. Der Vorteil, den dies bietet, ist die Möglichkeit, wiederverwendbares "Zeug" zu definieren, wodurch Konsistenz über mehrere Pakete hinweg gewährleistet wird. Sie definieren, wie Pakete strukturiert werden sollen und wie sie sich individuell unterscheiden - die "kompilierten" Ausgaben der Varigence-Tools sind SSIS-Pakete.
Stellen Sie sich das als Dynamic SQL für SSIS-Pakete vor. Mit einer GUI. Wirklich sehr, sehr cool.
quelle
Ich habe mehrmals versucht, SSIS zu verwenden, und es aufgegeben. IMO ist es viel einfacher, einfach alles zu tun, was ich in C # brauche. SSIS ist zu komplex, es hat zu viele Fallstricke und es lohnt sich einfach nicht. Es ist viel besser, mehr Zeit für die Verbesserung der C # -Fähigkeiten aufzuwenden als für das Erlernen von SSIS - Sie erhalten viel mehr Rendite für Ihr Training. Ich muss hier nicht ins Detail gehen - Ayende hat eine großartige Zusammenfassung geschrieben, zu der ich nichts hinzuzufügen habe .
Auch das Finden und Verwalten von Funktionen in einer VS-Lösung ist sehr viel einfacher. Unit-Tests mit VS sind einfach. Alles, was ich tun muss, ist, die Quelle in Subversion einzuchecken und zu überprüfen, wie sie geladen wurde. Unit-Tests von SSIS-Paketen sind, gelinde gesagt, sehr aufwändig.
Außerdem gab es Situationen, in denen SSIS einige Spalten in einigen Zeilen stillschweigend nicht ausfüllte und sie nur übersprang, ohne Ausnahmen auszulösen. Wir haben viel Zeit damit verbracht, Fehler zu beheben und herauszufinden, was los ist. Die Entwicklung einer alternativen Lösung in C # dauerte weniger als eine Stunde und funktioniert zwei Jahre lang ohne Probleme.
Auch Rhino ETL scheint wirklich cool zu sein.
Es gab einige ähnliche Diskussionen zum Stackoverflow .
quelle
Persönlich kümmere ich mich so weit wie möglich um den ETL-Prozess in SQL. Ich verwende SSIS, um aus ungeraden Datenquellen wie FTP-Sites oder Excel zu importieren, aber das dient nur dazu, Rohdaten in die Datenbank zu bringen, in der SQL den Rest erledigt.
Meine derzeitige Situation ist relativ einfach, da sich die meisten Daten in anderen MS SQL-Datenbanken befinden, mit denen ich Verbindungsserver einrichten kann. Wenn Sie eine Verbindung zu anderen Plattformen herstellen müssen, empfehle ich die Verwendung von
OPENQUERY
undBULK INSERT
. Sie können bei Bedarf programmgesteuert erstellt werden und zwischen den beiden können sie eine Verbindung zu den meisten Datentypen herstellen.Ich benutze SQL, weil es das ist, was ich am besten weiß, aber es hat einige objektive Vorteile. Vor allem wird es bereits verwendet: Es ist nicht erforderlich, ein neues Tool zu lernen oder dafür zu bezahlen. Es ist eine weit verbreitete Fähigkeit, die für Ihren Chef von Bedeutung sein sollte, wenn nicht für Sie. Da es in der Datenbank ausgeführt wird, ist die Protokollierung einfach. Es basiert auf einfachem Textcode, ist also einfach zu durchsuchen und funktioniert gut mit der Quellcodeverwaltung. Es ist sehr stabil, mit sehr geringer Wahrscheinlichkeit, dass der Anbieter Änderungen vornimmt und die Abwärtskompatibilität beeinträchtigt. Es ist wahrscheinlich mindestens so schnell wie jede RBAR-Sprache.
Wenn Sie mehr benötigen, empfehle ich .NET, schon allein, weil es in SSIS und SQLCLR verwendet wird. Ich verwende C # -Apps, um den gesamten ETL-Prozess zu verwalten - Unterschritte starten, deren Ausgabe überwachen, E-Mails senden. Aber fast alles könnte mit SQL Agent, dbmail usw. gemacht werden.
Gibt es einen Grund , warum Sie nicht können SQL für Ihre ETL verwenden? Was konnte es nicht für Sie tun?
quelle