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:
- Verwenden von EZAPI zum programmgesteuerten Generieren von SSIS-Paketen mit einfachem Datenfluss. Die zu extrahierenden Tabellen und Spalten stammen aus den zuvor genannten Metadatentabellen.
- 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.
Antworten:
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
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,
DimProducts
während mein Diener sich mit dem Laden vonSnowflakeFromHell
Paketen 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.
quelle
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
quelle