Sollten Programmierer SSIS verwenden und wenn ja, warum? [geschlossen]

94

Aus welchen Gründen sollte ich als .NET-Entwickler SSIS-Pakete dem Schreiben von Code vorziehen? Wir haben eine Menge Pakete in der Produktion, in denen ich gerade arbeite, und sie sind ein Albtraum, sowohl zu "schreiben" (vielleicht zu zeichnen?) Als auch zu warten. Jedes Paket sieht aus wie eine Schüssel mit mehrfarbigen Spaghetti mit C # - und VB.NET-Skripten, die an den Stellen gemischt werden, an denen die Abstraktionen zusammenbrechen. Um herauszufinden, was jede "SQL-Task ausführen" oder "Foreach-Schleife" bewirkt, muss ich auf das verdammte Ding doppelklicken und durch einen Baum von Literalwerten und Ausdrücken blättern, der auf mehrere Registerkarten verteilt ist.

Ich bin aufgeschlossen und möchte wissen, ob andere gute Entwickler SSIS produktiver finden als nur Code zu schreiben. Wenn Sie SSIS produktiver finden, sagen Sie mir bitte warum.

Charles
quelle
4
Ich weiß nicht, wie es geht, aber SSIS ist viel schneller als jeder manuelle Code, den ich zum Erstellen eines Data Warehouse geschrieben habe. Es ist ein Tool für den Job - versuchen Sie, die Aufgaben in
untergeordnete
1
Link zu einer ähnlichen Frage: stackoverflow.com/q/690123/327165
Ilya Berdichevsky
5
Bin gerade darauf gestoßen. Ich arbeite daran, einige problematische SSIS-Pakete zu verwalten, und habe einen Dekompiler geschrieben, um die nützliche Arbeit daraus in ein C # -Programm zu extrahieren. code.google.com/p/csharp-dessist
Ted Spence
5
Nach meiner Erfahrung kann SSIS schmerzhaft sein, wenn Sie "lange" und / oder "komplexe" Skripte oder viele Skripte haben. Das Debuggen einer Konsolen-App ist viel einfacher. In SSIS können Sie Ihr Skript nicht alleine debuggen. Die aufgrund eines Skripts erzeugten Fehlermeldungen sind kryptisch und Sie können die genaue Zeile, die den Fehler verursacht hat, nicht sehen. IMO, wenn die Projektanforderungen mit Standard-SSIS-Komponenten erfüllt werden können, ist SSIS möglicherweise der richtige Weg. Dazu müssen Sie jedoch die Einschränkungen der SSIS-Komponenten kennen. Dieses Video zeigt Ihnen, warum "Mail-Aufgabe senden" fast nutzlos ist - youtube.com/watch?v=IlUzkMPYDSk
Steam
3
Diese Frage hat 7 Antworten, daher wurden keine Debatten, Argumente, Umfragen oder ausführlichen Diskussionen angefordert. Warum nicht offen halten?
Michael Freidgeim

Antworten:

94

Ich verwende jeden Tag SSIS, um ein großes Data Warehouse und einen Cube zu warten und zu verwalten. Ich bin seit zwei Jahren zu 100% Business Intelligence und Data Warehousing. Davor war ich 10 Jahre lang .NET-Anwendungsentwickler.

Der Wert von SSIS ist eine Workflow-Engine zum Verschieben von Daten von einem Ort zum anderen mit möglicherweise eingeschränkter Transformation und bedingter Verzweigung auf dem Weg. Wenn Ihre Pakete viel Skript enthalten, verwendet Ihr Team SSIS für die falschen Aufgaben oder ist mit SQL nicht vertraut oder hat sich dem Hype verschrieben. SSIS-Pakete sind sehr schwer zu debuggen. Skriptkomponenten sind ein absoluter Albtraum und sollten nur zum Formatieren, Schleifen oder als letztes Mittel verwendet werden.

  1. Halten Sie Ihre Pakete einfach, SQL-Aufgaben und Datenflussaufgaben.
  2. Arbeiten Sie so viel wie möglich außerhalb von SSIS, vorzugsweise in SQL
  3. Halten Sie Ihre Variablen in einem einzigen globalen Bereich
  4. Behalten Sie Ihre SQL in Variablen oder Speicherprozeduren, niemals inline
  5. Bewahren Sie Ihre Variablenwerte in einem Konfigurationsspeicher auf, vorzugsweise in einer SQL-Datenbank
Kevin D. White
quelle
1
Mit den Schwierigkeiten, die ich mit SSIS hatte, hätte ich eine voreingenommenere Antwort gegeben (als ob Sie es nicht an der Tonalität meiner Frage erkennen könnten :)). Schöne Antwort, Kevin.
Charles
6
Wie haben Sie 10 Jahre lang mit .NET gearbeitet, als es 2002 veröffentlicht wurde?
Brady Holt
7
[Zitat] Microsoft begann die Entwicklung mit .NET Framework Ende der neunziger Jahre ursprünglich unter dem Namen Next Generation Windows Services (NGWS). Ende 2000 wurden die ersten Beta-Versionen von .NET 1.0 veröffentlicht. [/ Quote] Auf diese Weise arbeitete er wahrscheinlich mit der Beta.
Nitefrog
Die Frage wurde 2010 beantwortet. Nehmen Sie also die zwei Jahre BI ab und die weiteren 10 Jahre 1998, zwei Jahre vor der von Ihnen erwähnten Beta-Version. Ansonsten gute Antwort! :)
finoutlook
Ja, der globale Geltungsbereich ist sinnvoll. Wenn Sie es lokal machen und an anderer Stelle darauf zugreifen möchten, haben Sie ein Problem. Sie können den Bereich des lokalen nicht einfach in einen globalen ändern. Sie müssen stattdessen viele Klicks und Löschungen vornehmen. Wenn Sie sogar 10-15 Einheimische haben, wird dies zu einem Schmerz.
Steam
52

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.

Auch das Finden und Aufrechterhalten 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.

AK
quelle
Danke für deine Punkte Alex. Hier ist ein Beispiel für eine meiner Meinung nach gotcha - stackoverflow.com/questions/21616435/… .
Steam
2
Gibt es eine Liste aller C # / Programmierthemen, die ein ETL-Entwickler kennen muss? Z.B. LINQ, SqlDataReader, DataTable usw. Auch ich bin der Meinung, dass SSIS für komplexe Aufgaben nicht geeignet ist. Wenn Sie ein einfaches Projekt / eine einfache Aufgabe zum Kopieren und Einfügen haben, ist SSIS möglicherweise das beste Werkzeug.
Steam
@ Blasto haben Sie Rhino ETL ausprobiert
AK
Alex, Jeromes Antwort schlug auch Rhino ETL vor. Es scheint mir dunkel. Daher würde ich zögern, es zu verwenden, da es an Dokumentation, Support und Tutorials mangelt. Außerdem sieht es so aus, als würde nur ein Entwickler daran arbeiten. Das verringert mein Vertrauen in das Werkzeug. Ich würde dies zum Spaß oder aus Neugier versuchen, aber ich kann dies nicht für ein echtes Projekt verwenden. Vielen Dank.
Steam
Wenn jemand ein Tutorial über Rhino ETL (mit reinem C #) möchte, ist hier eines - codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam
14

Meiner Meinung nach ist SSIS nur für ETL-Operationen vorgesehen und sollte keine Logik außerhalb dieses Bereichs enthalten.

Christoph
quelle
8
ETL = Transformationslast extrahieren
Christoph
3
So fühle ich mich. In unserem Fall verwenden wir SSIS, um beispielsweise E-Mail- (oder SFTP-) CSVs mit Preisinformationen zu erstellen. Die Verzweigung, eingebetteten Skripte usw. sind ziemlich schrecklich. Wenn Sie nur einige Daten mit SSIS verschieben würden, wäre dies wahrscheinlich nicht so schlimm.
Charles
1
Ich denke, Ihre Antwort könnte etwas tiefer gehen.
Steam
3
Kann das T in ETL keine Logik beinhalten? Nur ein Gedanke ...
cs0815
Wenn es nur um das Formen / Weiterleiten der Daten geht, sicher. Aber ich würde jede Geschäftslogik vermeiden.
Christoph
11

Ich hatte die unglückliche Erfahrung, an einem Projekt zu arbeiten, bei dem wir dachten, SSIS wäre eine ausreichend gute Lösung, um Daten aus verschiedenen Quellen zu aggregieren und zu kombinieren. Das Unglückliche war, dass es zuerst großartig funktionierte, aber dann änderten sich die Anforderungen und wir erkannten (irgendwann), dass es das falsche Werkzeug war.

Vielleicht haben wir es nur falsch verwendet, aber wir hatten große Schwierigkeiten, wenn wir jemals unser Schema geändert haben, und wir haben schließlich einfach unsere ORM-Definitionen vom Frontend wiederverwendet, um ein benutzerdefiniertes Tool in C # zu schreiben, um dies zu tun. Da wir das Datenmodell bereits hatten, war dies überraschend einfach. Natürlich sind YMMV und ich kein SSIS-Experte, aber in diesem Fall verursachte SSIS eine Menge Doppelarbeit und Kopfschmerzen, als wir nur die Ärmel hochkrempelten und die Handcodierung einfacher als erwartet durchführten.

Daher würde ich viel über Flexibilität nachdenken, wenn ich über SSIS nachdenke.

Luke
quelle
7
Ich teile einige der gleichen Gefühle. Es ist einfach, Code umzugestalten ... nicht so sehr mit einem visuellen DSL.
Charles
Luke, können Sie uns bitte einen Überblick über Ihre Projektanforderungen geben? Vielen Dank.
Steam
@blasto Wir haben versucht, Daten aus mehreren Datenbanken zu integrieren und einige der integrierten Dienstprogramme für den probabilistischen String-Abgleich zu verwenden, um Daten aus den verschiedenen Systemen (im Wesentlichen CRM-Datenbanken) zusammenzuführen. Es war vor mehr als 5 Jahren, also erinnere ich mich nicht an alle Details.
Luke
Wenn Sie ein .net-Shop sind und Daten für Data Warehousing-Zwecke verschieben, hilft Ihnen SSIS nur, wenn Sie es gut genug kennen. Ich habe viele Leute gesehen, die .net-Gurus sind, aber SSIS nicht vollständig verstehen (und ich beschuldige sie nicht). SSIS erfordert sicher eine Person, die es gut genug kennt, sonst werden Sie Pakete schreiben, die ineffizient sind und nicht das Richtige tun können.
rvphx
6

SSIS hat seinen Platz, und dieser Platz ist keine allgemeine Programmierung oder ein Ersatz für gespeicherte Prozeduren. Es kommt von der ETL-Schule (Extrahieren, Transformieren und Laden) und dort ist es am stärksten.

Der alte Name (DTS, Data Transformation Services) und der neue Name (SSIS, SQL Server Integration Services) machen deutlich, dass es sich um einen Dienst (oder eine Reihe von Diensten) handelt, mit dem Daten bearbeitet werden können, um die SQL Server-Datenbank in größere Prozesse zu integrieren.

DaveE
quelle
Ich sehe nicht ein, wie diese Antwort so viele positive Stimmen bekommen sollte. Es wird nicht erwähnt, warum SSIS Ihnen nicht die Leistung einer Programmiersprache bieten kann. Es ergibt keinen Sinn für mich. Ein Beispiel dafür, wo SSIS nicht mit einer Programmiersprache übereinstimmt, ist das Debuggen. Anscheinend ändert SSIS 2012 das. Vielleicht ist das Tool auf dem Weg, programmiererfreundlicher zu werden.
Steam
>> Ein Beispiel dafür, wo SSIS nicht mit einer Programmiersprache übereinstimmt ... Ich stimme zu - es ist keine Programmiersprache. Es ist ein anständiges ETL-Tool.
DaveE
4

Wenn Sie Ihre Daten programmgesteuert verschieben möchten, sollten Sie sich Rhino ETL ansehen.

Ich arbeite auch an meinem eigenen Framework, Fluent ETL , da ich finde, dass SSIS für einfache Datenaufgaben im Zusammenhang mit der Entwicklung, wie das Laden von Unit-Testdaten aus einer CSV-Datei, etwas zu kompliziert ist.

Hieronymus
quelle
Rhino ETL ist dunkel und hat derzeit nur 24 Fragen zu SO - stackoverflow.com/questions/tagged/rhino-etl . Ich denke, dass C # für ETL gut genug wäre, wenn Sie das Wissen und die Erfahrung haben.
Steam
1
Gibt es beliebte Alternativen zu Rhino ETL?
Steam
3

SSIS ist kein Programm. Viele Änderungen sind in SSIS schneller durchzuführen, und Sie erhalten als Administrator sehr schöne detaillierte Fortschritts- und Fehlerinformationen - was in den Szenarien, die SSIS lösen soll, sehr gut sein kann, da manchmal Probleme auftreten und der Administrator viel benötigt Information.

Davon abgesehen ist SSIS nicht wirklich nützlich, wenn Sie das Zeug nicht selbsterklärend haben - sie sind für etwas gedacht, zu viel in die allgemeine Programmierung zu bringen, macht sie nervig.

TomTom
quelle
2
Können Sie uns ein Beispiel geben, wie SSIS die Entwicklung in einem Szenario beschleunigen und in den anderen verlangsamen kann?
Steam