Wenn Sie mit den im Data Warehousing verwendeten Begriffen bereits vertraut sind, können Sie diesen Teil überspringen.
Verfolgung von Dimensionsänderungen - Änderungsmanagement Typ 2 in einer typischen SQL-Umgebung
In einem typischen SQL-Szenario ist die Änderung von Dimensionsdaten ziemlich einfach. Wenn sich ein Dimensionswert ändert, starten Sie eine Transaktion, aktualisieren die Spalte end_date des aktuell gültigen Datensatzes, speichern den neuen Datensatz mit demselben start_date und bestätigen die Transaktion. Wenn die Dimension gelöscht wird, aktualisieren Sie einfach das Enddatum des aktuellen Datensatzes, was bedeutet, dass es danach keine Dimension mehr gibt.
Um dies anhand eines Beispiels zu veranschaulichen, stellen wir uns eine Dimension für Verkäufer vor. Jede Zeile stellt eine Person dar: Sie hat einen synthetischen Schlüssel (Primärschlüssel), einen eindeutigen Code (natürlicher Schlüssel), einen Namen und eine Region.
Während die Versionsspalte problemlos implementiert werden kann, sind die Spalten mit dem Gültigkeitsdatum problematisch:
Außerdem gibt es spezielle Anforderungen, damit sie funktioniert.
Wie Sie sehen können, ist es ziemlich restriktiv, ganz zu schweigen von der Tatsache, dass es sich noch in der Beta-Phase befindet, was bedeutet, dass es kein SLA gibt und keine Garantie, dass es nicht geändert oder ganz abgeschafft wird.
Trotz des Fehlens einer DML-Funktion ist BigQuery ein wirklich großartiges Tool. Anstatt also zu einem traditionellen SQL-System zurückzukehren, beschloss ich, eine Versionierung zu implementieren, die sich auf die Stärken von BigQuery stützt.
Anstelle einer Typ-2-Tabelle basiert diese Lösung auf der Typ-4-Historientabelle (mit einer Löschspalte). Dies ist die einzige Tabelle, die wir benötigen; in diesem Szenario gibt es keine aktuelle Tabelle. Die Regeln für das Füllen der Tabelle sind:
In dieser Tabelle würde eine Abfrage zum Abrufen von Verkäuferdaten zum 01.01.2010 wie folgt aussehen:
Zunächst suchen wir nach den zum angegebenen Zeitpunkt gültigen Datensätzen (start_date ist der letzte Wert vor dem angegebenen Zeitpunkt, Unterabfrage A), die wir dann mit allen Datensätzen in der Tabelle verbinden, die keinen gelöschten Datensatz darstellen, um alle nicht gelöschten Datensätze zu erhalten, die zum angegebenen Zeitpunkt gültig sind.
Wir können unsere Verlaufstabelle mithilfe einer BigQuery-Ansicht in eine richtige Tabelle mit Gültigkeitsdatum umwandeln:
Diese Abfrage verknüpft die Tabelle links mit einer Abfrage von sich selbst, die das Startdatum in Enddatum umbenennt. Die Verknüpfung lässt nur Zeilen zu, bei denen das Startdatum vor dem Enddatum liegt. Von all diesen Zeilen wird diejenige mit dem frühesten Enddatum ausgewählt. Dadurch wird sichergestellt, dass es keine Überschneidungen gibt. Anschließend werden die als gelöscht markierten Zeilen entfernt. Die resultierende Ansicht ist eine richtige Typ-2-Tabelle mit Gültigkeitsdaten.
Ein Problem bei dieser Ansicht ist, dass die aktuell gültige Zeile als Enddatum null hat, und der BigQuery BETWEEN-Operator mag keine Nullwerte. Um dieses Problem zu lösen, umhüllen wir die Spalte end_date mit einer IFNULL(expr, null_result)-Funktion und einem Datum in der fernen Zukunft:
Ich habe Ihnen gezeigt, wie Sie die Versionierung von Typ-2-Effektivdaten für Dimensionen mithilfe von Self-Joins in BigQuery implementieren. Im nächsten Beitrag dieser Serie zeige ich Ihnen eine weitere Möglichkeit, dies zu tun, und anschließend gehen wir auf die Leistung dieser Lösungen ein.