Gibt es eine Standardsprache / -schnittstelle für programmatische ETL in SQL Server?

10

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.

kubi
quelle
4
Ich bin kein sehr großer Benutzer von SSIS, kann aber die Wahrnehmung einer steilen Lernkurve hier verstehen. Ich ermutige Sie, sich einige Videos / Blogs von Andy Leonard, Jamie Thompson und Brian Knight anzusehen, die Experten auf diesem Gebiet sind, und eine Anleitung zu erhalten. Auf der Website sqlpass.org finden Sie kostenlose Videos von Pass Summit & sqlblog.com, pragmaticworks.com
Sankar Reddy,
Ich glaube nicht, dass die Lernkurve ein Problem ist. Ich weiß, wie ich die Aufgaben erledige, die ich in SSIS erledigen möchte. Ich suche nach einem neuen Prozess, weil die Lösungen, die ich gefunden habe, sich wiederholen, zerbrechlich und unnötig komplex sind.
Kubi
Kubi, wenn Sie Details zu den Komponenten hinzufügen können, auf die Sie sich beziehen, bringe ich jemanden mit, der in der Lage ist, dies für Sie zu beantworten. Ihre Frage ist derzeit zu weit gefasst, um sie zu beantworten.
Sankar Reddy
4
@kubi - Sie haben eines der schmutzigen kleinen Geheimnisse der BI-Branche angesprochen. ETL-Tools sind sehr, sehr schlecht in Bezug auf Abstraktion und wiederverwendbare Logik. Infolgedessen skalieren sie mit zunehmender Domänenkomplexität sehr schlecht.
ConcernedOfTunbridgeWells
1
Ich bin der festen Überzeugung, dass etwa die Hälfte der Kunden eines bestimmten Branchenprodukts für Banken und Versicherungen (hergestellt von einem Unternehmen, von dem Sie gehört haben und auf das normalerweise eine bestimmte Farbe Bezug nimmt) eine explizite technische Entscheidung treffen, um ihr Produkt zu bauen Genau aus diesem Grund wird die ETL-Verarbeitung in gespeicherten Prozeduren eingestellt.
ConcernedOfTunbridgeWells

Antworten:

6

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.

Jamiet
quelle
3

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 .

AK
quelle
2

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 OPENQUERYund BULK 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?

Jon aller Berufe
quelle
In der Tat verwenden wir SSIS, um Rohdaten in Temp-DBs zu sichern, und verwenden dann TSQL, um zu definieren, wie wir sie T und L wollen.
Paul