

{"id":31026,"date":"2022-07-26T00:30:49","date_gmt":"2022-07-26T00:30:49","guid":{"rendered":"https:\/\/www.scalefree.com\/?p=31026"},"modified":"2025-06-05T08:29:04","modified_gmt":"2025-06-05T06:29:04","slug":"data-vault-2-0-mit-dbt-teil-2","status":"publish","type":"post","link":"https:\/\/www.scalefree.com\/de\/blog\/tools\/data-vault-2-0-with-dbt-part-2\/","title":{"rendered":"Data Vault 2.0 mit DBT - Teil 2"},"content":{"rendered":"<div id=\"fws_69d61e20b831b\"  data-column-margin=\"default\" data-midnight=\"dark\"  class=\"wpb_row vc_row-fluid vc_row\"  style=\"padding-top: 0px; padding-bottom: 0px; \"><div class=\"row-bg-wrap\" data-bg-animation=\"none\" data-bg-animation-delay=\"\" data-bg-overlay=\"false\"><div class=\"inner-wrap row-bg-layer\" ><div class=\"row-bg viewport-desktop\"  style=\"\"><\/div><\/div><\/div><div class=\"row_col_wrap_12 col span_12 dark left\">\n\t<div  class=\"vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone\"  data-padding-pos=\"all\" data-has-bg-color=\"false\" data-bg-color=\"\" data-bg-opacity=\"1\" data-animation=\"\" data-delay=\"0\" >\n\t\t<div class=\"vc_column-inner\" >\n\t\t\t<div class=\"wpb_wrapper\">\n\t\t\t\t\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<h2><span style=\"font-weight: 400;\">Data Vault 2.0 mit dbt <\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Im ersten Teil dieser Blogserie haben wir Ihnen dbt vorgestellt. Nun schauen wir uns an, wie Sie <a href=\"https:\/\/www.scalefree.com\/de\/beratung\/datavault4dbt\/\">Data Vault 2.0 mit dbt<\/a> umsetzen k\u00f6nnen und welche Vorteile sich daraus ergeben. Falls Sie den ersten Teil noch nicht kennen, k\u00f6nnen Sie ihn <\/span><a href=\"https:\/\/www.scalefree.com\/scalefree-newsletter\/data-vault-2-0-with-dbt-part-1\/\"><span style=\"font-weight: 400;\">hier nachlesen.<\/span><\/a><\/p>\n<div class=\"content-list-wrapper\"><p class=\"content-heading\">In diesem Artikel:<\/p><ul class=\"content-list\"><li><a href=\"#dbt-models\">Dbt-Modelle<\/a><li><a href=\"#data-vault-2-0-and-macros\">Data Vault 2.0 und Makros<\/a><li><a href=\"#conclusion\">Fazit<\/a><\/ul><\/div>\n<p>&nbsp;<\/p>\n<h2>Dbt-Modelle<\/h2>\n<p><span style=\"font-weight: 400;\">dbt bietet die M\u00f6glichkeit, Modelle zu erstellen und aus diesen Modellen dynamisch SQL zu generieren und auszuf\u00fchren. So k\u00f6nnen Sie Ihre Datentransformationen in Modellen mit SQL und wiederverwendbaren Makros auf Basis von Jinja2 schreiben, um Ihre Datenpipelines sauber und effizient auszuf\u00fchren. <\/span><span style=\"font-weight: 400;\">Der wichtigste Teil f\u00fcr den Anwendungsfall Data Vault ist jedoch die M\u00f6glichkeit, solche Makros zu definieren und einzusetzen.<\/span><\/p>\n<p><b>Zun\u00e4chst sollten wir jedoch kl\u00e4ren, wie Modelle in dbt grunds\u00e4tzlich funktionieren.<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Dbt \u00fcbernimmt die Kompilierung und Ausf\u00fchrung 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\u00e4hrend der Kompilierung in SQL \u00fcbersetzt.<\/span><\/p>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 25px;\" class=\"divider\"><\/div><\/div><div class=\"img-with-aniamtion-wrap center\" data-max-width=\"100%\" data-max-width-mobile=\"default\" data-shadow=\"none\" data-animation=\"none\" >\n      <div class=\"inner\">\n        <div class=\"hover-wrap\"> \n          <div class=\"hover-wrap-inner\">\n            <img loading=\"lazy\" decoding=\"async\" class=\"img-with-animation skip-lazy nectar-lazy\" data-delay=\"0\" height=\"341\" width=\"512\" data-animation=\"none\" data-nectar-img-src=\"https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/01.png\" src=\"data:image\/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%20512%20341'%2F%3E\" alt=\"Data Vault 2.0 mit dbt\" data-nectar-img-srcset=\"https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/01.png 512w, https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/01-300x200.png 300w, https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/01-320x213.png 320w, https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/01-360x240.png 360w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div><div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 25px;\" class=\"divider\"><\/div><\/div>\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<p><span style=\"font-weight: 400;\">Die folgende Abbildung zeigt ein einfaches dbt-Modell. Ein gro\u00dfer Vorteil von Jinja ist die M\u00f6glichkeit, SQL programmatisch zu erzeugen \u2013 zum Beispiel mit Schleifen oder Bedingungen. \u00dcber die Funktion ref() erkennt dbt au\u00dferdem die Abh\u00e4ngigkeiten zwischen den Modellen und erstellt daraus einen Abh\u00e4ngigkeitsgraphen. So wird sichergestellt, dass Modelle in der korrekten Reihenfolge ausgef\u00fchrt werden und die <a href=\"https:\/\/www.scalefree.com\/scalefree-newsletter\/visual-data-vault-by-example-modeling-in-the-banking-industry\/\">Datenherkunft<\/a> nachvollziehbar bleibt. <\/span><span style=\"font-weight: 400;\">Ein solcher Lineage-Graph k\u00f6nnte etwa so aussehen:<\/span><\/p>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 25px;\" class=\"divider\"><\/div><\/div><div class=\"img-with-aniamtion-wrap center\" data-max-width=\"100%\" data-max-width-mobile=\"default\" data-shadow=\"none\" data-animation=\"none\" >\n      <div class=\"inner\">\n        <div class=\"hover-wrap\"> \n          <div class=\"hover-wrap-inner\">\n            <img loading=\"lazy\" decoding=\"async\" class=\"img-with-animation skip-lazy nectar-lazy\" data-delay=\"0\" height=\"173\" width=\"512\" data-animation=\"none\" data-nectar-img-src=\"https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/02.png\" src=\"data:image\/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%20512%20173'%2F%3E\" alt=\"Data Vault 2.0 mit dbt\" data-nectar-img-srcset=\"https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/02.png 512w, https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/02-300x101.png 300w, https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/02-320x108.png 320w, https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/02-360x122.png 360w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div><div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 25px;\" class=\"divider\"><\/div><\/div>\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<p><span style=\"font-weight: 400;\">Die Materialisierung von Modellen l\u00e4sst sich auf unterschiedlichen Konfigurationsebenen steuern. So ist schnelles Prototyping mit Views m\u00f6glich, bei Bedarf l\u00e4sst sich sp\u00e4ter aber auch auf materialisierte Tabellen umstellen \u2013 etwa aus Performancegr\u00fcnden.<\/span><\/p>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 50px;\" class=\"divider\"><\/div><\/div>\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<h2><span style=\"font-weight: 400;\">Data Vault 2.0 und Makros<\/span><\/h2>\n\t<\/div>\n<\/div>\n\n\n\n\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<p><span style=\"font-weight: 400;\">Wie aber l\u00e4sst sich <a href=\"https:\/\/www.scalefree.com\/de\/beratung\/data-vault-2-0\/\">Data Vault 2.0<\/a> mit dbt umsetzen? Der wichtigste Aspekt bei der Verwendung von Data Vault 2.0 ist die M\u00f6glichkeit, Makros zu definieren und zu nutzen. Makros k\u00f6nnen in Modellen aufgerufen werden und erzeugen dort zus\u00e4tzlichen oder sogar den gesamten SQL-Code dynamisch.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Beispielsweise k\u00f6nnten Sie ein Makro schreiben, das ein Hub generiert. Dieses Makro erh\u00e4lt das Quell- bzw. Staging-Modell als Eingabeparameter sowie die Angabe der Spalten f\u00fcr den Business Key, das Ladedatum und die Datensatzquelle. Der entsprechende SQL-Code f\u00fcr das Hub wird dann daraus dynamisch erzeugt. Der gro\u00dfe Vorteil: Eine \u00c4nderung am Makro wirkt sich sofort auf alle betroffenen Hubs aus, die Wartbarkeit erheblich verbessert.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Zus\u00e4tzlich profitiert man von der aktiven Open-Source-Community rund um dbt. Es gibt zahlreiche Open-Source-Pakete mit denen dbt erweitert werden kann.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Einige davon eignen sich auch hervorragend f\u00fcr den Einsatz von Data Vault 2.0 mit dbt.\u00a0<\/span><\/p>\n<p>Zum Beispiel bietet unser eigenes Open-Source-Paket <a href=\"\/de\/beratung\/datavault4dbt\/\">DataVault4dbt<\/a>, das hier bei <a href=\"https:\/\/www.scalefree.com\/de\/\">Scalefree<\/a>&nbsp;entwickelt und aktiv gepflegt wird, einen umfassenden Satz an dbt-Makros zur \u00dcbersetzung eines \u201eauf dem Papier\u201c entworfenen Data-Vault-Modells in tats\u00e4chliche Tabellen und Views \u2013 darunter Hubs, Links, Satelliten und mehr. Das Paket wird bereits in realen Projekten eingesetzt und unterst\u00fctzt dabei, Best Practices f\u00fcr eine moderne, revisionssichere Data-Vault-2.0-Implementierung durchzusetzen.<\/p>\n<p>Um alle Funktionen und Makro-Parameter im Detail kennenzulernen, werfen Sie einen Blick in die <a href=\"https:\/\/www.datavault4dbt.com\/documentation\/\" target=\"_blank\" rel=\"noopener\">Dokumentation<\/a>.<\/p>\n<p><span style=\"font-weight: 400;\">Das Einzige, was Sie in Ihrem Modell ben\u00f6tigen, beispielsweise f\u00fcr einen Hub, ist ein einziger Makroaufruf:<\/span><\/p>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 25px;\" class=\"divider\"><\/div><\/div>\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<pre><span style=\"font-weight: 400;\">{%-<\/span>\r\n\r\n<span style=\"font-weight: 400;\">hub(src_pk, src_nk, src_ldts, src_ource, source_model)<\/span><span style=\"font-weight: 400;\">\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">-%}<\/span><\/pre>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 25px;\" class=\"divider\"><\/div><\/div>\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<p><span style=\"font-weight: 400;\">Mit den Parametern des Makroaufrufs definieren Sie die Quelltabelle, in der sich die ben\u00f6tigten Spalten befinden (source_model), sowie die Spaltennamen f\u00fcr 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\u00fchrt, wird der SQL-Code kompiliert und auf dem Datenbanksystem ausgef\u00fchrt.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Die daf\u00fcr n\u00f6tigen Metadaten k\u00f6nnen beispielsweise direkt im Modell mithilfe von Jinja-Variablen definiert werden:<\/span><\/p>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 25px;\" class=\"divider\"><\/div><\/div><div class=\"img-with-aniamtion-wrap center\" data-max-width=\"100%\" data-max-width-mobile=\"default\" data-shadow=\"none\" data-animation=\"none\" >\n      <div class=\"inner\">\n        <div class=\"hover-wrap\"> \n          <div class=\"hover-wrap-inner\">\n            <img loading=\"lazy\" decoding=\"async\" class=\"img-with-animation skip-lazy nectar-lazy\" data-delay=\"0\" height=\"452\" width=\"512\" data-animation=\"none\" data-nectar-img-src=\"https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/03.png\" src=\"data:image\/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%20512%20452'%2F%3E\" alt=\"\" data-nectar-img-srcset=\"https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/03.png 512w, https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/03-300x265.png 300w, https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/03-320x283.png 320w, https:\/\/www.scalefree.com\/wp-content\/uploads\/2022\/07\/03-360x318.png 360w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div><div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 25px;\" class=\"divider\"><\/div><\/div>\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<p><span style=\"font-weight: 400;\">Dabei zeigt sich auch, dass dbt unterschiedliche Optionen zur Materialisierung bietet. So kann etwa mit der inkrementellen Materialisierung eine Entit\u00e4t schrittweise als Tabelle geladen werden.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Beim Ausf\u00fchren des Modells erzeugt dbt den vollst\u00e4ndigen SQL-Code aus dem Makro und entscheidet automatisch, wie die Daten geladen werden: Existiert die Hub-Tabelle noch nicht, wird sie erstellt und vollst\u00e4ndig geladen. Ist sie bereits vorhanden, erfolgt ein inkrementelles Laden.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Wer bereits versucht hat, ein Data Vault-Modell mit reinem SQL umzusetzen, wird schnell erkennen, wie viel einfacher dieser Ansatz im Vergleich dazu ist. Das Team kann sich vollst\u00e4ndig auf das Modellieren konzentrieren und sobald die Metadaten definiert sind, \u00fcbernimmt dbt zusammen mit den Makros die gesamte technische Logik.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Frei verf\u00fcgbare Pakete erm\u00f6glichen 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.\u00a0<\/span><\/p>\n<p>Wichtig zu beachten: Viele der derzeit verf\u00fcgbaren dbt-Pakete zur Umsetzung von Data Vault 2.0 weichen in einzelnen Details von den offiziellen Standards ab. Unser eigenes Open-Source-Paket <a href=\"\/de\/beratung\/datavault4dbt\/\">DataVault4dbt<\/a>, das hier bei Scalefree entwickelt und aktiv gepflegt wird, schlie\u00dft diese L\u00fccke: Es unterst\u00fctzt alle zentralen Data Vault 2.0 Entit\u00e4ten sowie aktuelle Best Practices. Das Paket kommt bereits in realen Projekten zum Einsatz und tr\u00e4gt dazu bei, eine moderne und revisionssichere Implementierung sicherzustellen.<\/p>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"divider-wrap\" data-alignment=\"default\"><div style=\"height: 25px;\" class=\"divider\"><\/div><\/div>\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<h2>Fazit<\/h2>\n\t<\/div>\n<\/div>\n\n\n\n\n<div class=\"wpb_text_column wpb_content_element\" >\n\t<div class=\"wpb_wrapper\">\n\t\t<p>Die Kombination von Data Vault 2.0 mit dbt vereinfacht die Umsetzung moderner Data-Warehouse-Architekturen erheblich \u2013 dank der M\u00f6glichkeit, Modelle und Makros zu definieren und daraus dynamisch effizientes SQL zu generieren. So kann sich das Team ganz auf das Design konzentrieren, w\u00e4hrend dbt die technische Umsetzung \u00fcbernimmt.<\/p>\n<p>Unser Open-Source-Paket DataVault4dbt bringt diese Vorteile direkt in reale Projekte und bietet eine zuverl\u00e4ssige, standardkonforme Grundlage f\u00fcr den Aufbau von Hubs, Links, Satelliten und mehr.<\/p>\n<p style=\"text-align: right;\"><span style=\"font-weight: 400;\">-von Ole Bause (Scalefree)<\/span><\/p>\n\t<\/div>\n<\/div>\n\n\n\n\n\t\t\t<\/div> \n\t\t<\/div>\n\t<\/div> \n<\/div><\/div>","protected":false},"excerpt":{"rendered":"Data Vault 2.0 mit dbt Im ersten Teil dieser Blogserie haben wir Ihnen dbt vorgestellt. Jetzt wollen wir uns ansehen, wie Sie Data Vault implementieren k\u00f6nnen...","protected":false},"author":9,"featured_media":31031,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[243],"tags":[327,357,371,370,364,360,362,358,363,369,361,365,366,359,373,372,368],"class_list":{"0":"post-31026","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-tools","8":"tag-data-vault-2-0","9":"tag-dbt","10":"tag-game-changer","11":"tag-incremental-basis","12":"tag-incremental-materialization","13":"tag-jinja","14":"tag-lineage-graph","15":"tag-macros","16":"tag-materialization","17":"tag-metadata","18":"tag-models","19":"tag-open-source","20":"tag-scalefree","21":"tag-sql","22":"tag-technical-and-business-requirements","23":"tag-vanilla-sql","24":"tag-variables"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/posts\/31026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/comments?post=31026"}],"version-history":[{"count":0,"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/posts\/31026\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/media\/31031"}],"wp:attachment":[{"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/media?parent=31026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/categories?post=31026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scalefree.com\/de\/wp-json\/wp\/v2\/tags?post=31026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}