Implementieren Sie eine sich langsam ändernde Typ-2-Dimension in SQL Server Integration Services-Teil 1

Implementieren Sie eine sich langsam ändernde Typ-2-Dimension in SQL Server Integration Services-Teil 1

Von: Koen Verbeeck / Aktualisiert: 2018-08-09 / Kommentare (4) / Verwandt: 1 | 2 | 3 | 4 | Mehr > Entwicklung von Integrationsdiensten

Kostenloses MSSQLTips-Webinar: Erste Schritte mit SSIS

Erfahren Sie, wie Sie mit SQL Server Integration Services beginnen und wie Sie mit dieser Demo ein SSIS-Projekt erstellen.webinar.,

Problem

Wir möchten den Verlauf in unserem Data Warehouse für mehrere Dimensionen beibehalten.Wir verwenden SQL Server Integration Services (SSIS), um die ETL (ExtractTransform and Load) zu implementieren. Wir haben den eingebauten Assistenten für langsam wechselnde Dimensionen ausprobiert, aber die Leistung scheint schlecht zu sein. Wie können wir die gewünschte Funktionalität mit regulären SSIS-Komponenten implementieren?

Lösung

Einführung in langsam wechselnde Dimensionen

Eine sich langsam ändernde Dimension (SCD) verfolgt die Geschichte ihrer einzelnen Mitglieder., Es gibt mehrere Methoden, die Ralph Kimball in seinem Buch The DatawarehouseToolkit vorgeschlagen hat:

  • Typ 1-Überschreiben Sie die Felder, wenn sich der Wert ändert. Keine Vorgeschichte.
  • Typ-2 – Erstellen Sie eine neue Zeile mit den neuen Werten für die Felder. Extracolumns geben an, wann eine Zeile gültig war.
  • Typ 3-Behalten Sie den alten Wert einer Spalte in einer separaten Spalte.
  • Es gibt mehr Arten von SCDs, aber sie sind meist eine hybride Kombination von oben.

In diesem Tipp konzentrieren wir uns auf die Typ-2-situation. Lassen Sie uns illustratewith ein Beispiel., Wir haben eine einfache Tabelle, in der Kundendaten gespeichert sind.

Die Spalte SK_Customer ist eine Spalte mit einer identityproperty, die für jede Zeile einen neuen Wert generiert. Wir möchten keephistory für das Location Attribut beibehalten. Wenn sich der Speicherort von Antwerpen nach Brüssel ändert, aktualisieren wir die Zeile nicht, sondern fügen einen neuen Datensatz ein:

Mit den Feldern ValidFrom und ValidTo wird angezeigt, wann ein Datensatz rechtzeitig gültig war. Ein neuer Ersatzschlüssel wird generiert, aberder Geschäftsschlüssel-CustomerName-bleibt derselbe., Wenn eine Faktentabelle geladen wird, wird eine Suche in der Kundentabelle durchgeführt. Abhängig vom Zeitstempel des Faktendatensatzes wird eine der beiden Zeilen zurückgegeben. Zum Beispiel:

Alle Fakten gelten für denselben Kunden. Wenn Sie den Gesamtumsatz fragenfür CustomerA ist das Ergebnis 31. Der Gesamtumsatz pro Standort beträgt 12,75 für Antwerpen und 18,25 für Brüssel, obwohl die Daten für denselben Kunden gelten. Mit SCDType 2 können wir unsere Daten mit historischen Attributen analysieren.,

Implementierungsmethoden

Es gibt mehrere Methoden zum Laden einer sich langsam ändernden Dimension vom Typ 2 in ein Data Warehouse. Sie können sich für einen reinen T-SQL-Ansatz entscheiden, entweder mit multipleT-SQL-Anweisungen oder mithilfe der MERGE-Anweisung. Letzteres wird in thetipUsing der SQL Server MERGE-Anweisung erläutert, um Typ 2 langsam ändernde Dimensionen zu verarbeiten.

Mit SSIS können Sie den integrierten Assistenten zum langsamen Ändern von Dimensionen verwenden, der mehrere Szenarien verarbeiten kann., Dieser Assistent wird in den tipsLoading Historical Data in ein SQL Server Data Warehouse beschrieben und behandelt langsam wechselnde Dimensionen in SQL Server Integration Services. Der Nachteil dieses Assistenten ist die Leistung: Er verwendet den Befehl OLE DB für everyupdate, was bei größeren Datensätzen zu einer schlechten Leistung führen kann. Wenn Sie Änderungen am Datenfluss vornehmen, um diese Probleme zu lösen, können Sie den Assistenten nicht erneut ausführen, da Sie alle Änderungen verlieren würden.

Die letzte Option – abgesehen von der Verwendung von 3rdparty-Komponenten-besteht darin,die SCD Type 2-Logik selbst im Datenfluss zu erstellen, den wir im nächsten Abschnitt beschreiben werden.,

Implementierung in SSIS

Die in diesem Tipp vorgeschlagene Lösung funktioniert für jede Version von SSIS. Wir’llreprise dem Beispiel des customer-dimension, aber ein zusätzliches Feld Hinzugefügt wurde:die E-Mail-Attribut. Wir behalten den Verlauf der E-Mail-Adressen nicht bei, daher überschreibt anynew value alle anderen Werte.

Zuerst lesen wir die Daten aus einer Quelle, höchstwahrscheinlich einer Staging-Umgebung. Wenn Sie eine relationale Quelle verwenden, können Sie die OLE DB-Quellkomponente mit einer SQL-Abfrage verwendenum die Daten zu lesen. Wählen Sie nur Spalten aus, die Sie tatsächlich für Ihre Dimension benötigen. Auch hier wird das Feld ValidFrom berechnet., Da Sie typischerweise Daten vom Vortag laden, wird ValidFrom auf das Datum von gestern gesetzt. Wenn Sie keine relationale Quelle haben, können Sie diese Spalte mithilfe einer abgeleiteten Columntransformation hinzufügen.

Im nächsten Schritt suchen wir nach der Dimension.Hier überprüfen wir, ob die eingehenden Zeilen entweder eine Einfügung oder eine Aktualisierung sind.Wenn keine Übereinstimmung gefunden wird, ist die Zeile ein neues Dimensionsmitglied und muss eingefügt werden.Wenn eine Übereinstimmung gefunden wird, ist das Dimensionsmitglied bereits vorhanden, und wir müssen nach SCD-Typ-2-Änderungen suchen., Es sei denn, Sie haben eine sehr große Dimension, können Sieder vollständige Cache:

Konfigurieren Sie die Lookup-Transformation, um nicht übereinstimmende Zeilen an die Ausgabe ohne Übereinstimmung zu senden. In SSIS 2005 ist diese Option noch nicht vorhanden, daher können Sie entweder die Fehlerausgabe verwenden oder die Transformation so einstellen, dass Fehler ignoriert und Einfügungen und Aktualisierungen mithilfe einer bedingten Aufteilung ausgeblendet werden.

Im Verbindungsbereich ruft die folgende SQL-Abfrage die Spalten surrogatekey, Business key (CustomerName) und SCD Type 2 ab., Für jedes Mitglied wird nur die letzte Zeile abgerufen, indem nach dem Feld ValidTo gefiltert wird.

Aus Gründen der Übersichtlichkeit wird das Feld Location in Location_OLD umbenannt. Klicken Sie im Bereich „Volumes“ auf den Geschäftsschlüssel und wählen Sie alle anderen Spalten aus.

Jetzt können wir fügen Sie eine OLE DB-Ziel auf der Leinwand. Dieses Ziel schreibt alle neuen Zeilen in die Dimension. Verbinden Sie die Lookup No Match Outputof der Lookup Transformation mit dem Ziel.,

Ordnen Sie im Zuordnungsbereich die Spalten des Datenflusses den Spalten Derdimensionstabelle zu.

Die Spalte SK_Customer wird nicht zugeordnet, da es sich um eine Identitätsspalteund seine Werte werden von der Datenbank-Engine generiert. Die Spalte ValidTo wurde ebenfalls leer gelassen. Neue Zeilen haben keinen Wert für diese Spalte.

In Teil 2 dieses Tipps setzen wir unsere Konfiguration des Datenflusses fort,in der wir überprüfen, ob eine Zeile ein Update vom Typ 2 ist oder nicht.,

Nächste Schritte
  • Wenn Sie mehr über die Implementierung langsam ändernder Dimensionen inSSIS erfahren möchten, können Sie sich die folgenden Tipps ansehen:
    • Verwenden der SQL Server MERGE-Anweisung, um langsam ändernde Dimensionen vom Typ 2 zu verarbeiten
    • Laden von historischen Daten in ein SQL Server Data Warehouse
    • Behandeln Sie langsam ändernde Dimensionen in SQL Server Integration Services
  • In dieser Übersicht finden Sie weitere Tipps zur SSIS-Entwicklung.,

Zuletzt aktualisiert: 2018-08-09

Über den Autor
Koen Verbeeck ist ein BI-Profi, der sich auf den Microsoft BI-Stack mit einer besonderen Liebe zu SSIS spezialisiert hat.
alle meine Tipps

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.