In diesem Artikel werde ich erklären, wie wir mit Hilfe des SQL Server-Integrationsdienstpakets Daten einer Oracle-Datenbanktabelle aufteilen und in mehrere Arbeitsblätter einer Excel-Datei exportieren können.
DBAs haben häufig darum gebeten, Ad-hoc-Berichte aus einer Datenbank zu generieren. Kürzlich wurde ich gebeten, einen Bericht aus der Datenbank zu erstellen. Sie möchten, dass ich einen Bericht in mehreren Arbeitsblättern einer Excel-Datei bereitstelle. Es gibt verschiedene Möglichkeiten, dies zu tun, aber die Abfrage war ressourcenintensiv. Daher möchte ich Daten aus der Datenbank mit einer Ausführung extrahieren und habe mich für die Verwendung des SQL Server Integration Services-Pakets entschieden. SQL Server-Datentools haben eine Komponente namens Conditional Split Transformation die verwendet werden können, um die Aufgabe zu erfüllen.
Mit SQL Server-Datentools können wir Daten von verschiedenen Datenbankplattformen abrufen, indem wir die ODBC-Verbindung verwenden. Die meisten Datenbankplattformen stellen ihre Konnektivitätstreiber bereit, die verwendet werden können, um eine Verbindung zwischen Anwendung und Datenbank zu konfigurieren.
Was ist bedingte Split-Transformation
Die Transformation für bedingtes Teilen kann Datenzeilen abhängig vom Inhalt der Daten an verschiedene Ausgaben weiterleiten. Die Implementierung der Conditional Split-Transformation ist wie eine CASE-Entscheidungsstruktur in einer Programmiersprache. Es wertet Ausdrücke aus und leitet die Datenzeile basierend auf den Ergebnissen an die angegebene Ausgabe weiter. Diese Transformation stellt auch eine Standardausgabe bereit, sodass eine Zeile, die keinem Ausdruck entspricht, an die Standardausgabe weitergeleitet wird. (MSDN-Referenz :https://docs.microsoft.com/en-us/sql/integration-services/data-flow/transformations/conditional-split-transformation?view=sql-server-2017) .
Demo-Setup
Ich habe die Oracle 11g Express Edition auf meinem Computer installiert. Ich habe eine Tabelle namens EMPLOYEESDATA erstellt in der Personalabteilung Schema des XE Datenbank und fügte einige Dummy-Datensätze aus AdventureWorks2014 hinzu Datenbank.
Der folgende Code erstellt eine Tabelle:
CREATE TABLE "HR".."EMPLOYEE_DATA" ( "BusinessEntityID" NUMBER(*,0), "Title" NVARCHAR2(8), "FirstName" NVARCHAR2(50), "MiddleName" NVARCHAR2(50), "LastName" NUMBER( *,0), „AddressLine1“ NVARCHAR2(60), „AddressLine2“ NVARCHAR2(60), „City“ NVARCHAR2(30), „StateProvinceName“ NVARCHAR2(50), „PostalCode“ NVARCHAR2(15), „CountryRegionName“ NVARCHAR2( 50)) Segmenterstellung Sofortige pctfree 10 pctued 40 Initrans 1 Maxtrans 255 Nocompress -Protokollierungspeicher (Anfangs 65536 Nächst 1048576 MINEXTEN 1 MAXEXTENTEN 2147483645 PCTINCREASE 0 FREELISTEN 1 Freelist Gruppen 1 Puffer_pool Default Flash_Cache Default -Default -Default -Default -Default -Default -Default -Default -Default -Defaults -Defaultent.Um die Oracle-Datenbank mit SSDT zu verbinden, müssen wir die Oracle-Client-Software installieren. SQL Server-Datentools arbeiten im 32-Bit-Modus, daher sollte die 32-Bit-Version der ODBC-Treiber für Oracle installiert werden. Sie können Oracle Client hier herunterladen.
Ich habe eine Excel-Datei mit dem Namen „HRData.xls“ erstellt “ mit zwei Arbeitsblättern namens Australien und Kanada . Die Daten werden basierend auf dem Wert von CountryRegionName aufgeteilt Säule. Wenn der Spaltenwert von CountryRegionName Spalte ist Kanada dann wird es in Kanada gespeichert Arbeitsblatt und wenn der Spaltenwert von CountryRegionName ist Australien dann wird es in Australien gespeichert Arbeitsblatt.
Da wir alle wissen, wie man ein SSIS-Paket erstellt, werde ich direkt erklären, wie man eine Datenflussaufgabe erstellt.
Datenflussaufgabe erstellen
In der Datenflussaufgabe verwenden wir die folgenden drei Komponenten:
- ADO.NET-Quelle zum Auffüllen von Daten aus der Oracle-Datenbank.
- Bedingte Aufteilung, um Daten in mehrere Sätze aufzuteilen.
- Excel-Ziel mit zwei Arbeitsmappen namens "Australien" und "Kanada".
ADO.NET-Quelle konfigurieren
Ziehen Sie ADO.NET-Quelle per Drag-and-Drop aus der SSIS-Toolbox zum Datenfluss Windows und nennen Sie es Mitarbeiterdaten wie im folgenden Bild gezeigt:
Doppelklicken Sie auf Mitarbeiterdaten . Der ADO.NET Source Editor Dialogfeld wird geöffnet. Hier haben wir noch keine Verbindung erstellt, daher der ADO.NET-Verbindungsmanager Dropdown-Feld ist leer. Wir erstellen eine neue Verbindung. Klicken Sie dazu auf Neu in diesem Dialogfeld. Danach erscheint ein weiteres Dialogfeld Connection Manager konfigurieren wird wie im Bild unten gezeigt geöffnet:
Im ADO.NET Connection Manager konfigurieren Klicken Sie im Dialogfeld auf Neu . Ein weiteres Dialogfeld, Verbindungsmanager , wird geöffnet.
Standardmäßig .Net Providers\SQLClient Data Provider wird im Anbieter ausgewählt Dropdown-Feld. Da wir Daten aus der Oracle-Datenbank auffüllen, wählen wir OracleClient Data Provider aus .
In Servername Geben Sie im Textfeld den Namen oder die IP-Adresse des Servers ein, auf dem Oracle 11g installiert ist. Benutzername und Passwort werden verwendet, um eine Verbindung zur Oracle-Datenbank herzustellen. Ich hatte Oracle auf meiner lokalen VM installiert, daher lautet der Servername localhost . Ich werde die Datenbank mit HR verbinden Benutzer, daher lautet der Benutzername HR . Geben Sie das entsprechende Passwort ein und klicken Sie auf OK . Siehe folgendes Bild:
Klicken Sie nach Abschluss der Konfiguration auf Verbindung testen um die Verbindung mit der Datenbank zu überprüfen, und klicken Sie auf OK.
Wir haben den ADO.NET-Verbindungsmanager konfiguriert, daher wird der Standard-Verbindungsmanager automatisch im ADO.NET-Verbindungsmanager ausgewählt Dropdown-Listenfeld. Wir werden Daten aus der Tabelle abrufen, wählen Sie daher Tabelle oder Ansicht im Dropdown-Feld Datenzugriffsmodus. Die MITARBEITERDATEN habe ich bereits angelegt Tabelle in der HR Schema der Oracle-Datenbank, wählen Sie daher HR.EmployeesData im Namen der Tabelle oder der Ansicht Dropdown-Feld, wie im Bild unten gezeigt:
Bedingte Teilung konfigurieren
Um nun Daten basierend auf einer Bedingung in verschiedene Excel-Arbeitsblätter zu exportieren, verwenden wir die bedingte Teilungstransformation. Ziehen Sie die bedingte Teilungskomponente aus dem SSIS Toolbox zum Datenfluss Fenster wie im Bild unten gezeigt.
Ich habe bereits die Ausgabe von Daten der HR.EmployeeData erwähnt Tabelle wird basierend auf der in der Bedingten Teilung definierten Bedingung in mehrere Arbeitsblätter exportiert Komponente.
Zuerst werden wir die ADO.Net-Quelle mit der bedingten Teilungstransformation verbinden. Klicken Sie dazu auf den blauen Pfeil im Datenflusspfad unten in den Mitarbeiterdaten Komponente und ziehen Sie sie in die bedingte Teilungstransformation, wie in der Abbildung unten gezeigt.
Jetzt konfigurieren wir die bedingte Split-Transformation. Wie ich bereits erwähnt habe, teilen wir die Daten der HR.EmployeesData-Tabelle basierend auf dem Wert von CountryRegionName auf Spalte und speichern Sie sie in verschiedenen Arbeitsblättern.
Doppelklicken Sie dazu auf Conditional Split Transformation Editor . Der Conditional Split Transformation Editor Das Dialogfeld wird geöffnet, wie im folgenden Bild gezeigt:
Wie Sie im obigen Bild sehen können, hat der Conditional Split Transformation Editor drei Abschnitte, die bestimmen, wie Daten zu den nächsten Komponenten geleitet werden.
Abschnitt A :In diesem Abschnitt unter Spalten Ordnerliste der Ausgabespalten, abgeleitet von der ADO.Net-Quellkomponente, wird aufgelistet, die verwendet werden kann, um Bedingungen zum Teilen der Daten zu definieren.
Abschnitt B :In diesem Abschnitt werden verschiedene Funktionen aufgelistet, die zum Konvertieren der Ausgabe in das andere Format und zum Definieren von Bedingungen zum Teilen von Daten verwendet werden können.
Abschnitt C :In diesem Abschnitt können Sie eine Bedingung erstellen, die die Ausgabe der ADO.Net-Quelle in mehrere Ergebnismengen aufteilen kann.
Wir werden die Bedingung in Abschnitt-C hinzufügen. Erweitern Sie also zuerst den Spaltenknoten und ziehen Sie den CountryRegionName Spalte (Abschnitt A) und legen Sie es im Raster (Abschnitt C) ab, wie in der folgenden Abbildung gezeigt:
In diesem Beispiel definieren wir unsere Bedingung basierend auf CountryRegionName Säule. Die Liste der Mitarbeiter aus „Kanada“ wird im Excel-Arbeitsblatt mit dem Namen Kanada gespeichert und eine Liste der Mitarbeiter aus Australien wird in Australien gespeichert Arbeitsblatt. Basierend auf der Bedingung verwenden wir ist gleich (==) Operator. Die Gleichung lautet wie folgt:
[CountryRegionName]=="Australien"[CountryRegionName]=="Kanada"
Sobald die Bedingungen definiert sind, klicken Sie auf OK um das Dialogfeld zu speichern und zu schließen.
Excel-Ziel konfigurieren
Nachdem wir den Datenfluss nun in mehrere Pfade aufgeteilt haben, fügen wir für jeden Pfad ein Ziel hinzu. Da wir Tabellendaten in verschiedene Excel-Arbeitsblätter exportieren werden, müssen wir zwei Excel-Ziele erstellen. Ziehen Sie dazu die Excel-Verbindung aus SSIS Toolbox und legen Sie sie dort ab wie im Bild unten gezeigt:
Um das Excel-Ziel zu konfigurieren, doppelklicken Sie auf Excel-Ziel. Der Excel-Verbindungsmanager Dialogfeld wird geöffnet. Klicken Sie in diesem Dialogfeld auf Neu wie im folgenden Bild gezeigt:
Ein weiteres Dialogfeld namens Excel Connection Manager wird Öffnen. In diesem Dialogfeld geben wir einen Pfad an, in dem sich die Excel-Datei befindet. Ich habe die Mitarbeiterdaten erstellt Datei auf meinem Desktop. Wir durchlaufen das Dateisystem, wählen die Datei aus und klicken auf OK wie im folgenden Bild gezeigt:
Jetzt im Datenzugriffsmodus Wählen Sie im Dropdown-Feld Tabelle oder Ansicht aus und im Namen der Excel-Tabelle Wählen Sie im Dropdown-Feld Australia$, aus wie im Bild unten gezeigt:
Jetzt werde ich den Datenpfad konfigurieren. Ziehen Sie dazu den blauen Datenpfadpfeil von der bedingten Teilungstransformation zu den Mitarbeitern in Australien Excel-Zielkomponente. Wenn Sie den Datenpfad mit dem Excel-Ziel verbinden, wird ein Dialogfeld angezeigt, in dem Sie auswählen können, ob die Ausgabe zum ausgewählten Ziel geleitet werden soll. Das Dialogfeld sieht wie folgt aus:
Das Dialogfeld enthält alle Ausgaben in der Dropdown-Liste, die von der bedingten Teilungstransformation verfügbar ist. In diesem Fall enthält die Dropdown-Liste zwei Optionen.
- Australien
- Kanada
- Standardausgabe
Doppelklicken Sie auf die Excel-Zielkomponente, um die Tabellenspalten den Excel-Spalten zuzuordnen. Doppelklicken Sie dazu auf die Excel-Zielkomponente und im Excel-Ziel-Editor Wählen Sie im Dialogfeld Zuordnung aus Option, die sich im linken Bereich des Dialogfelds befindet, wie in der Abbildung unten gezeigt:
In der obigen Abbildung Eingabespalte ist der Spaltenname der Oracle-Tabelle und Zielspalte wird der Spaltenname der Excel-Tabelle sein. In dieser Demo sind die Spaltennamen der Tabelle und der Excel-Datei identisch. Also Excel-Ziel-Editor ordnet automatisch Eingabe- und Ausgabespalten zu.
Auf die gleiche Weise werde ich den Datenflusskonfigurationsprozess für Kanada wiederholen Datenpfad.
- Wir müssen Kanada auswählen in der Eingangsausgangsauswahl Dialogfeld, wie im Bild unten gezeigt.
- Im Excel-Zieleditor r, wählen Sie Kanada$ aus im Namen der Excel-Tabelle Dropdown-Feld, wie im Bild unten gezeigt.
Sobald alle Konfigurationen abgeschlossen sind, sieht die gesamte Datenflussaufgabe wie folgt aus:
SSIS-Paket testen
Lassen Sie uns nun das Paket ausführen und sehen, wie es funktioniert hat. Klicken Sie dazu auf Start Schaltfläche in der Menüleiste. Wenn das Paket die Ausführung erfolgreich abschließt, sollte es wie folgt aussehen:
Wie das obige Bild zeigt, fügte das Paket 1 Datensatz in der Region Australien ein Arbeitsblatt und 2 Datensätze in der Region Kanada Arbeitsblatt.
Zusammenfassung
In diesem Artikel haben wir ein SSIS-Paket mit einem einzelnen Datenfluss erstellt. Wir haben dem Datenfluss eine Transformation für bedingtes Teilen hinzugefügt, um die Daten in mehrere Pfade aufzuteilen. Wir haben dann jeden dieser Datenpfade zu verschiedenen Excel-Arbeitsblättern geleitet.
Referenzen :
Exportieren Sie SQL-Daten in mehrere Arbeitsmappen einer Excel-Datei.
Nützliche Tools:
Devart SSIS-Datenflusskomponenten – ermöglichen Ihnen die Integration von Datenbank- und Cloud-Daten über SQL Server Integration Services.
Devart ODBC-Treiber – bieten leistungsstarke und funktionsreiche Konnektivitätslösungen für ODBC-basierte Anwendungen.