webentwicklung-frage-antwort-db.com.de

Vorteile der Verwendung von SSIS-Paketen gegenüber gespeicherten Prozeduren?

Wenn ich die erforderlichen ETL-Anforderungen mithilfe gespeicherter Prozeduren erfüllen kann, sind stattdessen die Vorteile von SSIS-Paketen vorteilhaft? Mein ETL-Zeug ist nichts Wichtiges.

Ich fühle mich wie eine alte Technologie. Ich mag SQL. Alte Technologie ist nicht gleich veraltet, da gespeicherte Prozeduren nicht so schnell verschwinden.

27
Tony_Henrich

Wenn Ihre ETL hauptsächlich aus E und L besteht und nur wenig T enthält, und wenn Sie Ihre SPs so schreiben können, dass sie nicht auf Cursors angewiesen sind, ist es wahrscheinlich in Ordnung, nur mit SP zu fahren.

Bei komplexeren Prozessen, insbesondere bei umfangreichen Transformationen, sich langsam ändernden Dimensionen, Data Mining-Suchen usw., bietet SSIS drei Vorteile.

Erstens verwaltet es den Speicher sehr effizient, was im Vergleich zu T-SQL allein zu großen Leistungsverbesserungen führen kann.

Zweitens können Sie mit der grafischen Benutzeroberfläche große, komplexe und zuverlässige Transformationen viel einfacher erstellen als von Hand erstelltes T-SQL.

Und drittens können Sie mit SSIS leichter mit zusätzlichen externen Quellen interagieren, was beispielsweise für die Datenbereinigung sehr praktisch sein kann.

32
RickNZ

Ich habe im Land der gespeicherten Prozedur ETL für ein SQL Server Data Warehouse mit mehreren Terabyte gelebt. Diese Entscheidung wurde 2001 getroffen, als .NET 1.0 war. Daher war VB6 die Programmiersprachenalternative, und SSIS war noch nicht in der Nähe - es war DTS. Ich kann Ihnen sagen, dass es Vor- und Nachteile gab.

Einige Überlegungen:

  1. Wenn jeder in Ihrem Team SQL versteht, ist es einfach, in die gespeicherten Prozeduren zu suchen. SQL ist eine weithin bekannte Fähigkeit, die von Vorteil sein kann, wenn Sie über eine Vielzahl von ETL-Schreibern/Lesern verfügen. Sie müssen mehr als ein gelegentlicher Benutzer von SSIS sein, um zu verstehen, was er tut. Der grafische Ablauf auf hohem Niveau ist für die Dokumentation nett, aber wenn jemand sich in den Bauch setzen muss, sollte er SSIS besser kennen.
  2. SQL ist eine Modularisierung. Wenn Sie UDFs verwenden, erleiden Sie einen enormen Performance-Erfolg. Sie schreiben ähnlichen Code an mehreren Stellen und hassen sich selbst dafür, aber in ETL-Szenarien ist die Leistung oft großartig. Mit SSIS können Sie Ihre Aufgaben modularisieren und ausrechnen.
  3. Erwarten Sie nicht, dass Sie die Quellcodeverwaltung problemlos mit SSIS verwenden können. SQL - kein Problem. SSIS verwendet schreckliche XML-Dateien, die eingecheckt werden können. Viel Glück weicht bei früheren Versionen jedoch davon ab, was geändert wurde und wann.
  4. Sie müssen modular über Ihre SPs nachdenken, auch wenn es schwierig ist, sie so modular zu gestalten, wie Sie möchten. Verwenden Sie temporäre Tabellen, um Ihre Verarbeitung zu bündeln. Setzen Sie Indizes auf diese temporären Tabellen, bevor Sie sie verwenden. Versuchen Sie nicht, zu viel auf einmal zu tun. Kommentiere alles.
  5. Wenn Sie Cursor verwenden, machen Sie es falsch. Scheuen Sie sich nicht, in einer externen Konsolen-App zu verketten, die Sie in der Sprache Ihrer Wahl geschrieben haben, um einige Dinge zu tun, für die SQL einfach nicht geeignet ist.

Übrigens: Nachdem ich das Unternehmen verlassen hatte, wurde die Datenbank von SQL 2000 auf 2008 aktualisiert und langsam von gespeicherten Prozessen auf SSIS umgestellt. In meiner neuen Firma besitzen wir SSIS, aber nach der Verwendung waren wir uns alle einig, dass unsere individuell geschriebene .NET-ETL besser für unsere Zwecke geeignet ist. Jeder geht seinen eigenen Weg. Bei der Entscheidung müssen Wartung und Leistung, die Fähigkeiten Ihres Teams und die Fähigkeiten des Jobpools in Ihrer Region in Einklang gebracht werden.

25
mattmc3

Ich bin gerade dabei, unsere SSIS-Pakete loszuwerden und gespeicherte Prozeduren zu verwenden. Für uns sind gespeicherte Prozeduren enorm besser: 1) Sie sind viel einfacher zu warten, wir brauchen keine Gebote, brauchen keine Projekte zu erstellen und Pakete in Gebote zu importieren, so dass weniger Schritte erforderlich sind, um eine einfache gespeicherte Prozedur zu erstellen changes . 2) Bei allen aktuellen Paketen werden die Daten in einer Tabelle im Wesentlichen gekürzt und anschließend mit mehreren direkten Tabellen auf demselben Server mit direkten Mappings aufgefüllt. Sehr einfach Einfügen/Auswählen von SQL zum Schreiben. 3) Sie laufen viel schneller. Wir haben keine Cursor, keine Schleifenstrukturen, nur reines SQL. 4) Wir müssen nicht unsere ganze Zeit mit dem Rechtsklick und dem Arbeiten in kleinen Gebotsfenstern versuchen, dem Fluss der Logik zu folgen. Wir alle kennen TSQL-Grundlagen und das reicht für unsere Aufgaben aus.

6
Rob Kraft

Ich würde sagen, es hängt davon ab, was Sie tun. Nach meiner Erfahrung ist der Verbesserungsspielraum bei SSIS-Paketen jedoch enorm. Wir haben zehnfache Verbesserungen in unserer Data-Warehouse-Umgebung festgestellt, als wir einige der hart getroffenen gespeicherten Prozeduren in SSIS-Pakete aufgenommen haben. Die Speicherauslastung von SSIS (in dieser Situation sowieso) hat den ganzen Unterschied gemacht.

Ich möchte noch einmal betonen, dass es wichtig ist zu wissen, was Sie tun. Beispielsweise übertrifft eine SQL-Anweisung normalerweise einen SSIS-Datenfluss, wenn die Datentransformation auf demselben Server tabellarisch ist.

Am besten können Sie ein oder zwei SP auswählen und in SSIS erstellen und beide testen.

Anscheinend beginnt die Antwort für alle SQL-Fragen mit, es kommt darauf an ...

5

Wir verwenden eine kombinierte Methode, um das Beste aus zwei Welten herauszuholen: Wir verwenden SSIS, um Daten aus externen Quellen abzurufen und diese parallel in die Staging-Datenbank zu laden Dann verwenden wir SSIS-Pakete, um Pipelines zu orchestrieren und entsprechende SPs innerhalb des Kontrollflusses auszulösen .

Jede Transformationslogik ist in SPs integriert, da Datenflüsse schwer zu verwalten/ändern sind und keinen wesentlichen Vorteil bieten: 1) Es ist einfacher, SP zu ändern und Fehler zu beheben als ein Paket 2) Keine Möglichkeit, Komponenten in SSIS auf einfache Weise wiederzuverwenden, außer das Aufrufen externer Pakete 3) SVN-Diff von SP funktioniert, Diff von SSIS-Paket ist schrecklich :)

Außerdem verwenden wir SSIS, um SPs parallel auszuführen, um die Gesamtleistung zu steigern.

2
user1099734

Ich habe einige bemerkenswerte Leistungssteigerungen durch die Verwendung von SSIS gesehen. Dies ist besonders gut, wenn Sie über gespeicherte Prozeduren verfügen, die Verbindungsserver verwenden, da dies mehr Verarbeitungsleistung erfordert und Verbindungsserver dazu neigen, die gesamte Tabelle in den Speicher zu ziehen, bevor die von a benötigten Zeilen begrenzt werden Beitreten. Wir hatten eine gespeicherte Prozedur, deren Ausführung mehr als 7 Stunden dauerte. Ich habe diese in Daten von jedem Server aufgeschlüsselt und dann eine lokale Datenquelle für jeden in SSIS eingerichtet, die eine lokale Verarbeitung für jede Datenquelle ermöglicht, die über einen Verbindungsserver angesprochen wird. Der Job dauert jetzt 6 Minuten, ich würde sagen, das ist ein enormer Gewinn.

Caralyn

2
Caralyn

SSIS fehlen einige grundlegende Funktionen. Es gibt kein Paket vom Typ Informatica, mit dem die Entwicklung mit einer SQL-Anweisung für unformatierte Textdateien ausgeführt werden kann, und dem SQL-Server fehlt die Fehlerprotokoll-DML wie Oracle. Ich dachte wirklich, als Microsoft das Hinzufügen der Merge-Anweisung ankündigte, würden sie natürlich den Error-Bucket implementieren, der eine der wichtigsten Funktionen darstellt. Die Fehlerverarbeitung auf Zeilenebene ist wichtig. Wenn Sie eine SQL-Anweisung verwenden, um Datenstapel hinzuzufügen, wenn ein Datensatz ausfällt, wird der gesamte Stapel zurückgesetzt. 

1
jon

Ich habe einige Funktionen in SSIS ausprobiert und war nicht mit allen zufrieden. Ich habe mit dem Datenfluss aufgehört und war mit der Leistung, die ich sah, nicht wirklich zufrieden. Am Ende habe ich SSIS-Pakete entwickelt, die einen Kontrollfluss der SQL-Task hatten, von denen jeder eine gespeicherte Prozedur ausführte.

Dies stellte sicher, dass der SQL-Server die meisten E, T und L erledigte. Ich denke, wenn Sie die Datenflusskomponente verwenden, werden die Daten tatsächlich vom SQL-Server auf den Computer verschoben, auf dem das Paket ausgeführt wird.

Ich glaube, ich hätte versucht, das Dataflow-Ding zu optimieren (es ist schon eine Weile her, seit ich daran gearbeitet habe), wenn ich mit Anwendungen/Datenbanken/DW-Systemen von Drittanbietern interagieren müsste. 

1
ps.

Ich sehe keine offensichtlichen technischen Einschränkungen. Die gespeicherte Prozedur ist möglicherweise schwieriger zu befolgen als ein SSIS-Paket für komplexe ETL-Vorgänge - dies gilt jedoch nicht für jedes Szenario. Ich habe auch festgestellt, dass Pakete (SSIS und DTS) leichter als "Jobs" erkannt werden - die gespeicherten Prozeduren, die von geplanten Jobs ausgeführt werden, werden von Entwicklern oft übersehen, da sie die geplanten Jobs nicht sehen können.

Ich habe gesehen, dass ETL von gespeicherten Prozeduren und DTS/SSIS-Paketen gleichermaßen ausgeführt wurde. Solange die gespeicherte Prozedur kein großes Durcheinander von Code ist, scheint es angebracht. Ich habe nicht gesehen, dass eine Methode besser oder zuverlässiger als eine andere ist (aber dann habe ich keine gespeicherten Prozeduren gesehen, die komplexe ETLs ausführen).

1
Mayo

Ich arbeite seit Version 6.5 mit SQL Server - das ist lange Zeit! Und meiner Erfahrung nach ist die meisten ETLs so einfach, dass T-SQL einwandfrei funktioniert und nicht nur funktioniert, sondern auch sehr gut funktioniert - schnelle, zuverlässige, einfach strukturierte Programmierung. Ich glaube, alles, was in SSIS gemacht werden kann, kann in T-SQL von jemandem erledigt werden, der weiß, was er tut.

Die meisten Leute, die sich nach meiner Erfahrung stark für SSIS einsetzen, sind unerfahrene Entwickler, die mit grafischen Werkzeugen aufgewachsen sind und nicht wirklich wissen, wie man programmiert.

0
Todd McDaniel
  1. Die Leistung wird schneller als normal sein. Für das Abrufen von Daten müssen keine komplexen temporären Tabellen (Cursor) erstellt werden.

  2. Datenbereinigung ist ein Vorteil von SSIS.

  3. Inkrementelle Behandlung ist nur in ssis möglich.

  4. Wir können eine Paketkonfigurationsdatei erstellen und auf jedem Server bereitstellen. Der Benutzer kann die Serverdetails und die Anmeldeinformationen angeben.

  5. Grafische Benutzeroberfläche.

  6. Protokollierung, Fehlerbehandlung ist am besten in ssis.

0
Ashis Das

Für kleine Projekte, wenn Sie über solide SQL-Kenntnisse und ein Verständnis für die Geschäftsanforderungen verfügen, machen Sie weiter! 

Andernfalls, wenn Sie mit komplexen Datenextraktionen konfrontiert sind, werden umfangreiche Transformationsaufgaben gestellt. SSIS oder ein anderes ETL-Tool wird ausreichen.

prost

0
Jayron Soares

Für Datenübertragungen zwischen SQL-Servern verwenden Sie SSIS über SPs Sie können sich leicht um den Faktor 10 verbessern, wie oben erwähnt Wir sind von 6-7 Stunden auf einen überschaubaren Zeitrahmen übergegangen, indem Sie SP in eingebettet haben ein SSIS-Paket

Nebenbei bemerkt: SSIS besteht im Wesentlichen aus mehreren XML-Dateien, die auf verschiedene Arten manipuliert/verwendet werden können (z. B. zur Dokumentation).

0
plykkegaard