DWH-Temporalität Teil 4: SCD-Type-2
Wie erstellt man SCD-Type-2-Dimensionen im Kimball-Stil aus einem Data Vault? Praxisleitfaden zu PIT-Tabellen, Joins und dem Einsatz von Datavault Builder.
Kimball-Style-Dimensionen – SCD-Type-2-Output Falls Sie die ersten drei Teile noch nicht gelesen haben, empfehle ich, dies zuerst zu tun. https://wp.gr5qncwxtlc5sqo.static3.studio2020/03/03/temporality-data-warehouse-part-1-3-definition-challenge/ https://wp.gr5qncwxtlc5sqo.static3.studio2020/03/12/temporality-data-warehouse-part-2-3-getting-rid-temporal-complexity/ https://wp.gr5qncwxtlc5sqo.static3.studio2020/03/23/temporality-data-warehouse-part-3-4-give-me-the-damn-times/
Einstieg
Nachdem ich eine neun Seiten lange Geschichte zu diesem Thema geschrieben hatte – inklusive Historie, Modellierung und Performance-Überlegungen –, erkannte ich, dass das schlicht zu viel ist. Ich habe versucht, es auf das Wesentliche mit wenigen Stichpunkten zu reduzieren.
Wenn Sie die gesamte Komplexität dieses Artikels umgehen möchten, sollten Sie das DWH-Automatisierungstool Datavault Builder in Betracht ziehen, das all das für Sie übernimmt.
Wenn ich unten von PIT-Tabellen schreibe: Diese könnten stattdessen auch als Views realisiert werden – mit demselben Ergebnis, nur mit schlechterer Abfrageleistung, aber ohne die Notwendigkeit, die Tabellen zu laden.
Wenn ich unten von Dimensionen schreibe, gilt derselbe Gedanke auch für Facts.
PIT und PIT+ erstellen
Falls Sie dies dennoch selbst implementieren möchten, hier unsere Erkenntnisse in Kürze:
-
Lesen Sie die ersten 3 Teile dieser Blog-Reihe, um sicherzustellen, dass Sie wirklich SCD-Type-2-Output benötigen. SCD Type 2 macht Reports unnötig komplizierter, wenn kein echter Geschäftswert dahintersteht.
-
PIT-Tabellen sind kein Selbstzweck. Die SCD-Type-2-Dimension ist das Ziel. Das bedeutet: Man sollte nicht fragen, ob jemand oder ein Tool PIT-Tabellen generieren kann, sondern ob er/es die SCD-Type-2-Dimension erstellen kann, wie man sie benötigt.
-
PIT-Tabellen können ein Mittel sein, um SCD-Type-2-Output performanter zu gestalten
-
Wenn Sie PIT-Tabellen erstellen, tun Sie dies nur für die Granularitäten (Hubs), die Sie für den SCD-Type-2-Output benötigen
-
Wenn Sie PIT-Tabellen erstellen, beziehen Sie nur die Zeitscheiben für die Elemente ein (d. h. Satellites und Links), die an Ihrer SCD-Type-2-Dimension beteiligt sind. Das bedeutet: Zuerst die fachlichen Anforderungen ermitteln.
-
Manche befürworten die Erstellung von PIT-Tabellen als Snapshots. Das kann sinnvoll sein, wenn man nur auf Monatsend-Daten oder andere definierte Zeitscheiben zugreifen möchte. Da wir flexibler sein möchten, erstellen wir kontinuierliche SCD-Type-2-PIT-Tabellen, da Snapshots aus den kontinuierlichen leicht abgeleitet werden können, aber nicht umgekehrt.

Visuelle Attributauswahl im Datavault Builder
-
Wenn Sie nicht wissen, welche Spalten in der SCD-Type-2-Dimension ausgegeben werden sollen – und daher nicht ableiten können, welche Satellites in die PIT-Tabelle einbezogen werden müssen –, kehren Sie zu dem Punkt zurück, an dem Sie die Komplexität umgehen wollen
-
Wenn Sie PIT-Tabellen erstellen, beziehen Sie auch Ziel-Hashes und die Historie von Many-to-One- und One-to-One-Links ein. Sie werden sie benötigen, um PIT-Tabellen miteinander zu joinen. Ich nenne das PIT+

Satellites und verknüpfte Hashes in die PIT für Many-to-One- und One-to-One-Beziehungen einbeziehen
PITs joinen
-
Wenn Sie nichts über die erwartete Kardinalität Ihrer Links im Modell wissen, haben Sie ein Problem. Kehren Sie zu dem Abschnitt zurück, in dem Sie diese Komplexität umgehen möchten.
-
Basierend auf der DWH-Timeline (3d: Load Time) können PIT-Tabellen delta-basiert geladen werden, indem einfach neue Zeilen hinzugefügt werden, da die Load-Time-Timeline immer vorwärts läuft
-
Das Hinzufügen von Ghost Records zu Satellites zur Verbesserung der PIT-Abfrage-Performance hat auf den von uns getesteten Datenbankplattformen keinen Vorteil gegenüber einem einfachen Left Join der Satellites gezeigt (Ergebnisse können variieren – wir haben Snowflake, Exasol, Oracle und MSSQL getestet)*
-
Wenn eine SCD-Type-2-Dimension Spalten aus mehr als einer Granularität benötigt (Satellites, die mit verschiedenen Hubs verbunden sind), verwenden Sie einen Temporal Join, um immer ein Paar von Hubs zu kreuzen und eine kombinierte Timeline zu erhalten. Wenn ich keinen Fehler gemacht habe, sind die Operationen kommutativ: (((A B) C) D) = (((A D) B) C)).

-
Wenn Sie wissen möchten, wie PIT-Tabellen miteinander gejoint werden, senden Sie mir einfach eine E-Mail oder eine LinkedIn-Nachricht
-
Joinen Sie am Ende alle notwendigen Satellites an diese kombinierte Historie-Tabelle, um die benötigten Attribute zu erhalten
-
Optional können Sie unnötige Zeitscheiben entfernen. Das reduziert die Anzahl der Zeilen, die an das Reporting-Tool übertragen werden – aber auch ohne das Entfernen der unnötigen Zeitscheiben ist die Ausgabe vollständig korrekt.
Und das war’s. Wenn Sie es geschafft haben: Herzlichen Glückwunsch. Kurze Zusammenfassung:
Die nächste Frage ist, wie man SCD-Type-1- oder -2-Facts mit SCD-Type-2-Dimensionen kombiniert. Ich glaube aber, ich überlasse dieses Thema einem weiteren Blog-Artikel, nachdem Sie den Inhalt dieses hier verdaut haben.
Wenn jemand Performance-Tests durchgeführt hat, die auf abweichende Ergebnisse hindeuten, kontaktieren Sie mich bitte – ich bin offen dafür zu lernen. Ich teile auch gerne unsere Testskripte mit allen Interessierten.