Skip to main content
Scalefree Blog Datenwerkzeuge Data Vault 2.0 mit dbt – Teil 2

Data Vault 2.0 mit dbt

Im ersten Teil dieser Blogserie haben wir Ihnen dbt vorgestellt. Nun schauen wir uns an, wie Sie Data Vault 2.0 mit dbt implementieren können und welche Vorteile dies bietet. Falls Sie den ersten Teil noch nicht kennen, können Sie ihn hier lesen.

 

dbt-Modelle

dbt bietet die Möglichkeit, Modelle zu erstellen und aus diesen Modellen dynamisch SQL zu generieren und auszuführen. So können Sie Ihre Datentransformationen in Modellen mit SQL und wiederverwendbaren Makros auf Basis von Jinja2 schreiben, um Ihre Datenpipelines sauber und effizient auszuführen. Für den Data Vault-Anwendungsfall ist jedoch der wichtigste Teil die Fähigkeit, diese Makros zu definieren und zu verwenden.

Zunächst sollten wir jedoch klären, wie Modelle in dbt grundsätzlich funktionieren.

Dbt übernimmt die Kompilierung und Ausführung von Modellen, die mit SQL und der Makrosprache Jinja geschrieben sind. Jedes Modell besteht aus genau einer SQL SELECT-Anweisung. Der Jinja-Code wird während der Kompilierung in SQL übersetzt.

Data Vault 2.0 with dbt

Die folgende Abbildung zeigt ein einfaches dbt-Modell. Ein großer Vorteil von Jinja ist die Möglichkeit, SQL programmatisch zu erzeugen – zum Beispiel mit Schleifen oder Bedingungen. Über die Funktion ref() erkennt dbt außerdem die Abhängigkeiten zwischen den Modellen und erstellt daraus einen Abhängigkeitsgraphen. So wird sichergestellt, dass Modelle in der korrekten Reihenfolge ausgeführt werden und die Datenherkunft (Data Lineage) dokumentiert wird. Ein solcher Lineage-Graph könnte etwa so aussehen:

Data Vault 2.0 mit dbt

Die Materialisierung von Modellen lässt sich auf unterschiedlichen Konfigurationsebenen steuern. So ist schnelles Prototyping mit Views möglich, bei Bedarf lässt sich später aber auch auf materialisierte Tabellen umstellen – etwa aus Performancegründen.

Data Vault 2.0 und Makros

Aber wie können wir Data Vault 2.0 mit dbt implementieren? Der wichtigste Teil für die Nutzung von Data Vault 2.0 ist die Fähigkeit, Makros zu definieren und zu verwenden. Makros können in Modellen aufgerufen werden und generieren dann zusätzlichen SQL-Code oder sogar den gesamten SQL-Code in dieses Makro hinein.

Beispielsweise könnten Sie ein Makro schreiben, das ein Hub generiert. Dieses Makro erhält das Quell- bzw. Staging-Modell als Eingabeparameter sowie die Angabe der Spalten für den Business Key, das Ladedatum und die Datensatzquelle. Der entsprechende SQL-Code für das Hub wird dann daraus dynamisch erzeugt. Der große Vorteil: Eine Änderung am Makro wirkt sich sofort auf alle betroffenen Hubs aus, was die Wartbarkeit erheblich verbessert.

Zusätzlich profitiert man von der aktiven Open-Source-Community rund um dbt. Es gibt zahlreiche Open-Source-Pakete, mit denen dbt erweitert werden kann.

Einige davon eignen sich auch hervorragend für den Einsatz von Data Vault 2.0 mit dbt.

Unser eigenes Open-Source-Paket DataVault4dbt, das hier bei Scalefree entwickelt und aktiv gepflegt wird, bietet beispielsweise ein umfassendes Set an dbt-Makros, um ein Data-Vault-Modell „auf dem Papier“ in tatsächliche Tabellen und Views zu übersetzen – wie Hubs, Links, Satelliten und mehr. Das Paket wird aktiv in realen Projekten eingesetzt und hilft dabei, Best Practices für eine moderne, prüfungssichere Data Vault 2.0-Implementierung durchzusetzen.

Um alle Funktionen und Makro-Parameter im Detail kennenzulernen, werfen Sie einen Blick in die Dokumentation.

Das Einzige, was Sie in Ihrem Modell benötigen, beispielsweise für einen Hub, ist ein einziger Makroaufruf:

{%-

hub(src_pk, src_nk, src_ldts, src_source, source_model) 

-%}

Mit den Parametern des Makroaufrufs definieren Sie die Quelltabelle, in der sich die benötigten Spalten befinden (source_model), sowie die Spaltennamen für den Hash-Key(src_pk), den/die Business-Key(s) (src_nk), das Ladedatum (src_ldts) und die Datensatzquelle (src_source). Wird das Modell mitsamt dem enthaltenen Makro ausgeführt, wird der SQL-Code kompiliert und auf dem Datenbanksystem ausgeführt.

Die dafür nötigen Metadaten können beispielsweise direkt im Modell mithilfe von Jinja-Variablen definiert werden:

Dabei zeigt sich auch, dass dbt unterschiedliche Optionen zur Materialisierung bietet. So kann etwa mit der inkrementellen Materialisierung eine Entität schrittweise als Tabelle geladen werden.

Beim Ausführen des Modells erzeugt dbt den vollständigen SQL-Code aus dem Makro und entscheidet automatisch, wie die Daten geladen werden: Existiert die Hub-Tabelle noch nicht, wird sie erstellt und vollständig geladen. Ist sie bereits vorhanden, erfolgt ein inkrementelles Laden.

Wer bereits versucht hat, ein Data Vault-Modell mit reinem SQL („vanilla SQL“) umzusetzen, wird schnell erkennen, wie viel einfacher dieser Ansatz im Vergleich dazu ist. Das Team kann sich vollständig auf das Modellieren konzentrieren und sobald die Metadaten definiert sind, übernimmt dbt zusammen mit den Makros die gesamte technische Logik.

Frei verfügbare Pakete ermöglichen es, grundlegende Prinzipien von Data Vault 2.0 in dbt zu integrieren, und erleichtern so den Einstieg in die Implementierung. Aufgrund der offenen Architektur von dbt lassen sich alle Makros individuell an projektspezifische Anforderungen oder interne Standards anpassen.

Wichtig zu beachten: Viele der derzeit verfügbaren dbt-Pakete zur Umsetzung von Data Vault 2.0 weichen in einzelnen Details von den offiziellen Standards ab. Unser eigenes Open-Source-Paket DataVault4dbt, das hier bei Scalefree entwickelt und aktiv gepflegt wird, schließt diese Lücke, indem es alle Kern-Entitäten von Data Vault 2.0 und die neuesten Best Practices unterstützt. Das Paket wird bereits in realen Projekten eingesetzt, um eine moderne und prüfungssichere Implementierung zu gewährleisten.

Master dbt for Scalable Data Platforms

Learn how to design, build, and operate production-ready dbt projects with proven best practices.

Join the dbt Training

Fazit

Durch die Integration von Data Vault 2.0 mit dbt wird der Data-Warehousing-Prozess rationalisiert, indem die Funktionen von dbt zur Definition von Modellen und Makros genutzt werden, was eine effiziente und dynamische SQL-Generierung ermöglicht. Dieser Ansatz ermöglicht es den Teams, sich auf das Data Vault-Design zu konzentrieren, während dbt die zugrunde liegende Logik übernimmt.

Unser Open-Source-Paket DataVault4dbt bringt diese Vorteile direkt in reale Projekte und bietet eine zuverlässige, standardkonforme Grundlage für den Aufbau von Hubs, Links, Satelliten und mehr.

Leave a Reply