ETL: Extrahieren aus 200 Tabellen - SSIS-Datenfluss oder benutzerdefiniertes T-SQL?

12

Basierend auf meiner Analyse muss ein vollständiges Dimensionsmodell für unser Data Warehouse aus über 200 Quelltabellen extrahiert werden. Einige dieser Tabellen werden als Teil eines inkrementellen Ladevorgangs extrahiert, andere als Volllast.

Zu beachten ist, dass wir ungefähr 225 Quellendatenbanken haben, die alle dasselbe Schema haben.

Wie ich gesehen habe, müssen zum Erstellen eines einfachen Datenflusses in SSIS mit einer OLE DB-Quelle und einem OLE DB-Ziel die Spalten und Datentypen zur Entwurfszeit bestimmt werden. Das bedeutet, dass ich am Ende allein für die Extraktion über 200 Datenflüsse haben werde.

Aus Sicht der Wartbarkeit ist dies für mich ein großes Problem. Wenn ich den Extraktionscode grundlegend ändern müsste, müsste ich 200 verschiedene Datenflüsse ändern.

Als alternative Option habe ich ein kleines Skript geschrieben, das die Quelldatenbanken, Tabellennamen und Spalten liest, die ich aus einer Reihe von Metadatentabellen extrahieren möchte. Der Code wird in mehreren Schleifen ausgeführt und verwendet dynamisches SQL zum Extrahieren aus den Quelltabellen über einen Verbindungsserver und OPENQUERY.

Nach meinen Tests ist dies immer noch nicht so schnell wie die Verwendung eines SSIS-Datenflusses mit einer OLEDB-Quelle und einem OLEDB-Ziel. Ich frage mich also, welche Alternativen ich habe. Bisherige Gedanken sind:

  1. Verwenden von EZAPI zum programmgesteuerten Generieren von SSIS-Paketen mit einfachem Datenfluss. Die zu extrahierenden Tabellen und Spalten stammen aus den zuvor genannten Metadatentabellen.
  2. Kauf von Software von Drittanbietern (dynamische Datenflusskomponente)

Wie kann man das am besten angehen? Wenn es um die .NET-Programmierung geht, bin ich ein Anfänger, daher ist auch die Zeit, die erforderlich ist, um nur die Grundlagen zu erlernen, ein Problem.

8kb
quelle
1
Ist es möglich, eine Ansicht beizubehalten, die die Daten aus allen 225 Datenbanken vereint und das SSIS-Paket darauf verweist, da alle 225 Datenbanken dasselbe Schema aufweisen? Dies mag wie ein Clobbering-Tool erscheinen und wird nicht unbedingt magisch funktionieren. Es klingt jedoch viel einfacher zu verwalten als 225 SSIS-Pakete (auch wenn Sie dort eine gewisse Automatisierung durchführen). Sie können auch auf halbem Weg eine Ansicht für jeden Satz von Datenbanken erstellen, z. B. die Datenbanken 1-25, 26-50, 51-75 usw.
Aaron Bertrand
Die Datenbanken befinden sich auf mehreren Servern, was es meiner Meinung nach komplizierter macht. Ich habe tatsächlich versucht, anhand von 225 Datenbanken eine Ansicht verschiedener Tabellen in meiner Entwicklungsbox zu erstellen, und das Lesen der Daten war äußerst langsam.
14.
1
Nun, Sie möchten nur eine Ansicht, die auf Datenbanken auf demselben Server verweist. Auch hier ist eine einzelne Sicht auf alle 225 Tabellen nicht magisch, aber ich denke, Sie können immer noch teilen und erobern und haben keine 225 Datenflüsse.
Aaron Bertrand

Antworten:

12

Ich möchte nicht 200 Datenflüsse in einem einzigen Paket haben. Die Zeit, die nur zum Öffnen und Überprüfen benötigt würde, würde Sie vor Ihrer Zeit veralten lassen.

EzAPI macht Spaß, aber wenn Sie .NET und SSIS noch nicht kennen, wollen Sie das nicht. Ich denke, Sie werden viel mehr Zeit mit dem Erlernen des SSIS-Objektmodells und möglicherweise mit dem Umgang mit COM verbringen, als mit der eigentlichen Arbeit.

Da ich faul bin, stecke ich BIML als kostenlose Option ein, die Sie nicht aufgelistet haben. Aus einer Antwort auf SO /programming/13809491/generating-several-similar-ssis-packages-file-data-source-to-db/13809604#13809604

  • Biml ist ein interessantes Biest. Varigence verkauft Ihnen gerne eine Lizenz an Mist, diese wird jedoch nicht benötigt. Alles, was Sie brauchen, ist BIDSHelper und dann durchsuchen Sie BimlScript und suchen Sie nach einem Rezept, das Ihren Bedürfnissen entspricht. Sobald Sie das haben, klicken Sie auf die kontextsensitive Menüschaltfläche in BIDSHelper und whoosh, es generiert Pakete.

Ich denke, es könnte auch für Sie ein Ansatz sein. Sie definieren Ihr BIML, das beschreibt, wie sich Ihre Pakete verhalten sollen, und generieren sie dann. In dem Szenario, in dem Sie beschreiben, wo Sie Änderungen vornehmen und N Pakete reparieren müssen, beheben Sie Ihre Definition des Problems und generieren Pakete neu.

Wenn Sie sich mit dem Framework ausreichend vertraut gemacht haben, können Sie mit EzAPI alle Probleme beheben. Zum Teufel , da Sie dies als 2005 markiert haben, können Sie PacMan auch ausprobieren, wenn Sie umfangreiche Änderungen an vorhandenen Paketen vornehmen müssen.

Überlegungen zum SSIS-Entwurf

Im Allgemeinen versuche ich, meine Pakete auf die Lösung einer einzelnen Aufgabe zu konzentrieren (Verkaufsdaten laden). Wenn das zwei Datenflüsse erfordert, ist es auch so. Ich hasse es, ein Paket aus dem Import-Export-Assistenten mit vielen nicht zusammenhängenden Datenflüssen in einem einzigen Paket zu erben. Zerlegen Sie sie in etwas, das ein ganz bestimmtes Problem löst. Dies verringert das Risiko zukünftiger Verbesserungen, da die Oberfläche verringert wird. Ein zusätzlicher Vorteil ist, dass ich am Laden arbeiten kann, DimProductswährend mein Diener sich mit dem Laden von SnowflakeFromHellPaketen befasst.

Verwenden Sie dann Master-Pakete, um die untergeordneten Arbeitsabläufe zu orchestrieren. Ich weiß, dass Sie auf 2005 sind, aber die Veröffentlichung von SSIS in SQL Server 2012 ist der Schlafanzug der Katze. Ich mag das Projektbereitstellungsmodell und die enge Integration, die es zwischen Paketen ermöglicht.

TSQL vs SSIS (meine Geschichte)

Was den reinen TSQL-Ansatz betrifft, verwendeten sie in einem früheren Job einen Job mit 73 Schritten, um alle ihre Informix-Daten in SQL Server zu replizieren. Es dauerte im Allgemeinen ungefähr 9 Stunden, konnte sich aber auf ungefähr 12 erstrecken. Nachdem sie ein neues SAN gekauft hatten, waren es mehr als 7 Stunden. Derselbe logische Prozess, der in SSIS umgeschrieben wurde, dauerte unter 2 Stunden. Der wohl größte Faktor für die Verkürzung dieser Zeit war die "freie" Parallelisierung, die wir mit SSIS erhalten haben. Der Agent-Job führte alle diese Aufgaben seriell aus. Das Master-Paket teilte die Tabellen im Wesentlichen in Verarbeitungseinheiten (5 parallele Sätze von serialisierten Tasks von "Run Replicate Table 1", Tabelle 2 usw.) auf, wobei ich versuchte, die Buckets in quasi gleich große Arbeitseinheiten zu unterteilen. Auf diese Weise konnten die rund 60 Referenztabellen schnell aufgefüllt werden, und die Verarbeitung verlangsamte sich, als sie in die Datenbank "" gelangte.

Ein weiteres Plus für mich bei der Verwendung von SSIS ist, dass ich "freie" Konfiguration, Protokollierung und Zugriff auf die .NET-Bibliotheken für quadratische Daten bekomme, die ich in ein rundes Loch schlagen muss. Ich denke, es kann einfacher sein, ein SSIS-Paket zu warten (die Wartung wegzulassen) als einen reinen TSQL-Ansatz aufgrund der grafischen Natur des Tieres.

Wie immer kann Ihr Kilometerstand variieren.

billinkc
quelle
BIML sieht sehr interessant aus. Ich überlegte auch, jeden Datenfluss als separates Paket zu erstellen und dann über ein Master-Paket aufrufen zu lassen. Findest du das besser? Auch neugierig, ob Sie eine Meinung zum T-SQL-Ansatz haben. Es ist langsamer, aber ich habe es getestet und es wird funktionieren.
14.
Ich habe meine Antwort mit Gedanken zu Design und reinem tsql-ETL-Ansatz
aktualisiert
0

Sie haben erwähnt, dass Sie 200 Quelltabellen und 225 Datenbanken haben. Ich gehe davon aus, dass die 200 Quelltabellen eine Anzahl aller Tabellen aus allen 225 Datenbanken sind (denn wenn Sie 200 Tabellen in jeder Datenbank haben, wird die Gesamtanzahl Ihrer Tabellen auf 45000 gesetzt). Sie haben auch erwähnt, dass das Schema der Datenbank für die 225 Datenbanken identisch ist.

Sie können die SSIS-Pakete zunächst nur für die Datenbank 1 erstellen. Wenn Sie dann Ihre Jobs planen, können Sie einfach die Datenbankverbindungszeichenfolge mithilfe der Paketkonfiguration ändern (wenn Sie SQL 2005 verwenden, verwenden Sie das Paketbereitstellungsmodell). Wie bereits in den früheren Antworten erwähnt, bietet SQL 2012 neue Möglichkeiten zum Konfigurieren Ihrer Parameter mithilfe des Projektbereitstellungsmodells.

Weitere Informationen zur Paketkonfiguration mit SSIS finden Sie hier: http://www.sql-server-performance.com/2007/package-configuration-2005/

Weitere Informationen zur Verwendung von Projektparametern finden Sie unter /programming/15206184/how-to-configure-ssis-2012-project- to- rundunder-different-environment- configurat

Harb
quelle