{"id":515,"date":"2024-04-07T09:06:55","date_gmt":"2024-04-07T09:06:55","guid":{"rendered":"https:\/\/oberle-it-beratung.de\/?p=137"},"modified":"2024-04-07T09:06:55","modified_gmt":"2024-04-07T09:06:55","slug":"ein-dwh-mit-git-linux-docker-postgresql-dbt-und-automatedv","status":"publish","type":"post","link":"https:\/\/www.elrebo.de\/index.php\/2024\/04\/07\/ein-dwh-mit-git-linux-docker-postgresql-dbt-und-automatedv\/","title":{"rendered":"Ein DWH mit git, Linux, Docker, PostgreSQL, dbt und AutomateDV"},"content":{"rendered":"\n<p>Was braucht man, um ein Data Warehouse (DWH) zu betreiben?<\/p>\n\n\n\n<p>Ich stelle ihnen hier eine L\u00f6sung vor, die einen virtuellen Server ben\u00f6tigt, auf dem das DWH betrieben werden kann. Au\u00dfer diesem virtuellen Server, f\u00fcr den monatliche Kosten anfallen, den Personalkosten f\u00fcr die DWH-Mitarbeiter und den Kosten f\u00fcr Training und Beratung werden nur Komponenten eingesetzt, die kostenfrei zur Verf\u00fcgung stehen.<\/p>\n\n\n\n<p>Bei der Umsetzung der DWH-Funktionalit\u00e4t setzen wir Tools wie dbt und AutomateDV ein, die nur einen geringen Konfigurationsaufwand erfordern und viele Features bereits out-of-the-box mitliefern. <\/p>\n\n\n\n<p>Sowohl beim System als auch bei den DWH-Prozessen nutzen wir die Features der verwendeten Systeme m\u00f6glichst ohne jede individuelle Erweiterung oder Anpassung.<\/p>\n\n\n\n<p>Diese L\u00f6sung ist damit besonders f\u00fcr kleine und mittlere Unternehmen geeignet, in denen \u00fcblicherweise nur wenige Personen f\u00fcr den Aufbau und den Betrieb eines solchen Systems zur Verf\u00fcgung stehen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Die Basis (Systeme und Software)<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Linux-Server<\/h4>\n\n\n\n<p>Wir ben\u00f6tigen zun\u00e4chst einen Rechner, auf dem die DWH-Software und die DWH-Datenbank betrieben wird. Daf\u00fcr verwenden wir einen virtuellen Server, den wir entweder selbst hosten oder bei einem Cloud Service Provider hosten lassen. Er soll ein Linux-Betriebssystem und genug freien Speicherplatz f\u00fcr unser DWH haben. Au\u00dferdem sollen die Daten des Servers in ein Backup-Konzept eingebunden sein.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Docker-Umgebung<\/h4>\n\n\n\n<p>In dem Linux-Betriebssystem betreiben wir unser DWH in einer Docker-Umgebung. Dadurch k\u00f6nnen wir in der Docker-Umgebung genau die Software in genau der Version bereitstellen, die wir f\u00fcr unsere DWH-Anwendung ben\u00f6tigen.<\/p>\n\n\n\n<p>Die Docker-Umgebung eines DWH besteht aus dem Docker-Container f\u00fcr die DWH-Applikation dwh-app und dem Docker-Container f\u00fcr die DWH-Datenbank dwh-db.  <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"953\" height=\"1024\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.23.23-953x1024.png\" alt=\"\" class=\"wp-image-149\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.23.23-953x1024.png 953w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.23.23-279x300.png 279w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.23.23-768x825.png 768w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.23.23.png 990w\" sizes=\"auto, (max-width: 953px) 100vw, 953px\" \/><\/figure>\n\n\n\n<p>Wir k\u00f6nnen so auf einem Server auch mehrere Stages betreiben: eine Development-, eine Test- und eine Produktionsumgebung.<\/p>\n\n\n\n<p>Zur Docker-Umgebung geh\u00f6rt auch ein Docker Repository, in dem die Images der DWH-Applikation abgelegt werden.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">PostgreSQL-Datenbank<\/h4>\n\n\n\n<p>Bei der Datenbank entscheiden wir uns f\u00fcr eine PostgreSQL-Datenbank, da sie mit einer freien Open-Source-Lizenz bereitgestellt wird und deshalb keine Lizenzkosten f\u00fcr die Datenbank anfallen. Erste Versuche, die wir mit einer freien MS-SQLServer-Express-Datenbank durchgef\u00fchrt haben, funktionierten nur bis zu einer DB-Gr\u00f6\u00dfe von ca. 10 GB. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.28.24.png\" alt=\"\" class=\"wp-image-151\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">git-Repository<\/h4>\n\n\n\n<p>Die Software f\u00fcr unser DWH wird in einem git-Repository abgelegt. Wir nutzen daf\u00fcr ein Azure DevOps Projekt. Das git-Repository wird in Azure DevOps-Projekten kostenfrei zur Verf\u00fcgung gestellt.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Continuous Integration<\/h4>\n\n\n\n<p>Jeder neue Stand der DWH-Prozesse, der im git-Repository gespeichert wird, triggert einen automatischen Build der Docker-Umgebung.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">dbt<\/h4>\n\n\n\n<p>Die Software, in der die DWH-Prozesse abgebildet werden, basiert auf dem Tool dbt:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>data build tool<\/strong>&nbsp;(<strong>dbt<\/strong>) is an&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Open-source_software\">open-source<\/a>&nbsp;command line tool that helps analysts and engineers&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Data_transformation\">transform<\/a> data in their&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Data_warehouse\">warehouse<\/a>&nbsp;more effectively.<sup><a href=\"https:\/\/en.wikipedia.org\/wiki\/Data_build_tool#cite_note-2\">[2]<\/a><\/sup><\/p>\n<cite>aus https:\/\/en.wikipedia.org\/wiki\/Data_build_tool, abgerufen am 31.03.2024<\/cite><\/blockquote>\n\n\n\n<p>In dbt werden die Transformationen mit Select-Statements und yaml-Konfigurationen beschrieben. Das dbt-Tool generiert daraus die ausf\u00fchrbaren Programme und die Dokumentation der Prozesse. <\/p>\n\n\n\n<p>Diese Software wird im Docker-Container dwh-app bereitgestellt.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">AutomateDV<\/h4>\n\n\n\n<p>Die Data Vault 2.0 Modellierung im DWH wird mit der dbt Package AutomateDV umgesetzt:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>AutomateDV is a dbt package that generates &amp; executes the&nbsp;ETL&nbsp;you need to build a Data Vault 2.0 Data Warehouse.<\/p>\n<cite>aus https:\/\/automate-dv.readthedocs.io\/en\/latest\/, abgerufen am 31.03.2024<\/cite><\/blockquote>\n\n\n\n<p>Diese Software wird im Docker-Container dwh-app bereitgestellt.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Weitere Skripte zur Automatisierung der Prozesse<\/h4>\n\n\n\n<p>F\u00fcr die Automatisierung werden Skripte verwendet, die im Docker-Container dwh-app \u00fcber cron gesteuert werden. So k\u00f6nnen t\u00e4gliche, w\u00f6chentliche oder monatliche Bereitstellungen und Aufbereitungen der Daten konfiguriert werden.<\/p>\n\n\n\n<p>Die Skripte sind in Powershell 7 geschrieben. Powershell 7 wurde als Plattform-\u00fcbergreifende Skriptsprache gew\u00e4hlt, da so auch eine Implementierung unter Windows vorstellbar ist.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">IDE<\/h4>\n\n\n\n<p>Zur Entwicklung der DWH-Software sollte eine IDE (Integrated Development Environment) verwendet werden.<\/p>\n\n\n\n<p>Wir haben uns f\u00fcr die Community Edition der IntelliJ IDEA entschieden. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Database Tool<\/h4>\n\n\n\n<p>F\u00fcr die Verwaltung der PostgreSQL-Datenbank und zum Testen und Evaluieren von Select-Statements zum Datenbank-Zugriff nutzen wir das Database Tool DBeaver Community.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Die Inhalte<\/h3>\n\n\n\n<p>Alle Definitionen und Transformationsregeln des DWH werden in der IDE entwickelt und im git-Repository gespeichert. <\/p>\n\n\n\n<p>Die DWH-Prozesse erledigen die folgenden Aufgaben:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Export der ben\u00f6tigten Tabellen der operativen Systeme (OpSys) in CSV-Dateien (Skript)<\/li>\n\n\n\n<li>Laden der CSV-Dateien in die DWH-Datenbank in ein OpSys-Schema (Skript)<\/li>\n\n\n\n<li>Laden der Daten aus dem OpSys-Schema in die Persistent Staging Area (dbt)<\/li>\n\n\n\n<li>Aufr\u00e4umen der Persistent Staging Area, damit nur Monatsultimo-St\u00e4nde aufbewahrt werden (Skript)<\/li>\n\n\n\n<li>Bereitstellen der aktuellen Ladedaten in der Raw-Stage (dbt)<\/li>\n\n\n\n<li>Laden der Stage-Tabellen des Raw Vault (AutomateDV)<\/li>\n\n\n\n<li>Laden der Hubs, Links und Satellites des Raw Vault (AutomateDV)<\/li>\n\n\n\n<li>Erstellen der Views auf den Raw Vault (dbt)<\/li>\n\n\n\n<li>Ausf\u00fchren der Bereinigungen und Transformationen in der Raw-Stage des Business Vault (dbt)<\/li>\n\n\n\n<li>Laden der Stage-Tabellen des Business Vault (AutomateDV)<\/li>\n\n\n\n<li>Laden der Hubs, Links und Satellites des Business Vault (AutomateDV)<\/li>\n\n\n\n<li>Laden der Data Marts aus dem Business Vault und dem Raw Vault (dbt)<\/li>\n<\/ul>\n\n\n\n<p>Diese Prozesse laufen t\u00e4glich, w\u00f6chentlich oder monatlich. Sie werden im Docker-Container dwh-app \u00fcber cron gesteuert.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"362\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.20.12-1024x362.png\" alt=\"\" class=\"wp-image-148\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.20.12-1024x362.png 1024w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.20.12-300x106.png 300w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.20.12-768x272.png 768w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.20.12.png 1244w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Alle mit dbt oder AutomateDV gekennzeichneten Prozessschritte sind in der automatisch generierten dbt-Dokumentation enthalten und beschreiben so die gesamte Transformation aus den operativen Systemen \u00fcber den Raw Vault und den Business Vault bis zu den Data Marts.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/04\/Bildschirmfoto-2024-04-02-um-23.10.45-1024x671.png\" alt=\"\" class=\"wp-image-147\" \/><\/figure>\n\n\n\n<p>In den n\u00e4chsten Monaten m\u00f6chte ich verschiedene Teile dieser L\u00f6sung im Detail vorstellen. Wenn Sie also an bestimmten Themen besonders interessiert sind, dann freue ich mich \u00fcber ihre Vorschl\u00e4ge!<\/p>\n\n\n\n<p>Mein n\u00e4chster Post soll sich aber mit der Kraft der Abstraktion besch\u00e4ftigen. Ich werde zeigen, warum es gut und sogar unerl\u00e4\u00dflich ist, gewisse Dinge immer auf die gleiche Art zu tun und dann auch nicht mehr dar\u00fcber nachzudenken, warum.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was braucht man, um ein Data Warehouse (DWH) zu betreiben? Ich stelle ihnen hier eine L\u00f6sung vor, die einen virtuellen Server ben\u00f6tigt, auf dem das DWH betrieben werden kann. Au\u00dfer diesem virtuellen Server, f\u00fcr den monatliche Kosten anfallen, den Personalkosten f\u00fcr die DWH-Mitarbeiter und den Kosten f\u00fcr Training und Beratung werden nur Komponenten eingesetzt, die [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":404,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,14,18],"tags":[],"class_list":["post-515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dwh","category-dv20","category-werkzeuge"],"_links":{"self":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/posts\/515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/comments?post=515"}],"version-history":[{"count":0,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/posts\/515\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/media\/404"}],"wp:attachment":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/media?parent=515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/categories?post=515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/tags?post=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}