{"id":191,"date":"2024-08-23T14:11:23","date_gmt":"2024-08-23T14:11:23","guid":{"rendered":"https:\/\/oberle-it-beratung.de\/?p=191"},"modified":"2024-08-23T14:11:23","modified_gmt":"2024-08-23T14:11:23","slug":"willibald-data-uebernahme-der-kunden-ins-data-warehouse","status":"publish","type":"post","link":"https:\/\/www.elrebo.de\/index.php\/2024\/08\/23\/willibald-data-uebernahme-der-kunden-ins-data-warehouse\/","title":{"rendered":"Willibald-Data: \u00dcbernahme der Kunden ins Data Warehouse"},"content":{"rendered":"\n<p>In diesem Beitrag m\u00f6chte ich, wie zuvor bereits angek\u00fcndigt, ins Detail gehen und zeigen, wie wir die Daten von Willibald in das DWH \u00fcbernehmen.<\/p>\n\n\n\n<p>Der erste Schritt der \u00dcbernahme ins DWH ist das Exportieren der Daten aus dem operativen System von Willibald in die CSV-Dateien. Dieser Schritt wird hier nicht beschrieben. Die CSV-Dateien der Schnittstellen sind der Ausgangspunkt unserer Betrachtung.<\/p>\n\n\n\n<p>Zun\u00e4chst stellen wir die Webshop-Daten von Willibald f\u00fcr alle drei Lieferungen in einem \u00dcbergabeverzeichnis bereit. Daf\u00fcr haben wir f\u00fcr jede Lieferung einen Timestamp f\u00fcr die Bereitstellung der Daten vergeben:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lieferung1: 2022-03-16 23:00:00<\/li>\n\n\n\n<li>Lieferung2: 2022-03-22 23:00:00<\/li>\n\n\n\n<li>Lieferung3: 2022-03-26 23:00:00<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"929\" height=\"1024\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-22-um-22.17.09-929x1024.png\" alt=\"\" class=\"wp-image-195\" style=\"width:650px;height:auto\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-22-um-22.17.09-929x1024.png 929w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-22-um-22.17.09-272x300.png 272w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-22-um-22.17.09-768x847.png 768w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-22-um-22.17.09.png 1148w\" sizes=\"auto, (max-width: 929px) 100vw, 929px\" \/><\/figure>\n\n\n\n<p>F\u00fcr jede Lieferung wird dann ein Skript aufgerufen, dass die Willibald-Daten in das Data Warehouse \u00fcbernimmt. Hier wird als Beispiel das Skript lieferung_1.sh gezeigt, dass die erste Lieferung ins Data Warehouse \u00fcbernimmt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"958\" height=\"528\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-22-um-22.25.25.png\" alt=\"\" class=\"wp-image-196\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-22-um-22.25.25.png 958w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-22-um-22.25.25-300x165.png 300w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-22-um-22.25.25-768x423.png 768w\" sizes=\"auto, (max-width: 958px) 100vw, 958px\" \/><\/figure>\n\n\n\n<p>Die \u00dcbernahme der 2. und der 3. Lieferung wird mit entsprechenden Skripten ausgef\u00fchrt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00dcberblick \u00fcber den Ablauf<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Die CSV-Dateien werden mithilfe von SQL-Skripten in die DWH-Datenbank \u00fcbernommen: \n<ul class=\"wp-block-list\">\n<li>0102_config_load.ps1 und<\/li>\n\n\n\n<li>0102_willibald_load.ps1<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Anschlie\u00dfend werden die Daten im Tool dbt unter Verwendung des AutomateDV-Plugins  in die Persistant Staging Area (PSA) \u00fcbernommen:\n<ul class=\"wp-block-list\">\n<li>0201_psa.ps1<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Dann  werden die Daten im Tool dbt unter Verwendung des AutomateDV-Plugins in den Raw Vault \u00fcbernommen:\n<ul class=\"wp-block-list\">\n<li>0302_load.ps1\n<ul class=\"wp-block-list\">\n<li>Bereitstellen der Raw Stage<\/li>\n\n\n\n<li>Bereitstellen der Stage<\/li>\n\n\n\n<li>Erstellen der Hubs, Links und Satellites im Raw Vault<\/li>\n\n\n\n<li>Erstellen der &#8220;Last Seen&#8221;-Tabellen im Raw Vault<\/li>\n\n\n\n<li>Bereitstellen von Views auf die Objekte des Raw Vault<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Zum Abschluss der Lieferung werden die Daten in den &#8220;Last Seen&#8221;-Tabellen aufger\u00e4umt, was wieder mit einem SQL-Skript au\u00dferhalb von dbt geschieht:\n<ul class=\"wp-block-list\">\n<li>0399_delete_from_ls.ps1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Beispiel: \u00dcbernahme der Kundendaten<\/h3>\n\n\n\n<p>Als Beispiel m\u00f6chte ich hier die \u00dcbernahme der Kundendaten genauer beschreiben. Die Schnittstelle &#8220;Kunde&#8221; f\u00fcr die Kundendaten ist deshalb gut geeignet, da sie recht einfach ist. Es gibt darin eine Kunden-ID&nbsp;(&#8220;KundeID&#8221;) und ein paar Informationen zu jedem Kunden. Die einzige Besonderheit ist das Feld VereinsPartnerID, das einen Fremdschl\u00fcssel in die Tabelle der VereinsPartner darstellt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"544\" height=\"58\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-23-um-13.29.08-edited-1.png\" alt=\"\" class=\"wp-image-227\" style=\"width:647px;height:auto\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-23-um-13.29.08-edited-1.png 544w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-23-um-13.29.08-edited-1-300x32.png 300w\" sizes=\"auto, (max-width: 544px) 100vw, 544px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"518\" height=\"55\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-23-um-13.29.08-edited-4.png\" alt=\"\" class=\"wp-image-230\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-23-um-13.29.08-edited-4.png 518w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/08\/Bildschirmfoto-2024-08-23-um-13.29.08-edited-4-300x32.png 300w\" sizes=\"auto, (max-width: 518px) 100vw, 518px\" \/><\/figure>\n\n\n\n<p>In den folgenden Kapiteln beschreibe ich, wie diese Kundendaten von den csv-Dateien bis in den Raw Vault \u00fcbertragen werden.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Einlesen der CSV-Datei in das Schema Willibald<\/h4>\n\n\n\n<p>Im Skript 0102_willibald_load.ps1 werden f\u00fcr die Schnittstelle &#8220;Kunde&#8221; diese beiden SQL-Skripte aufgerufen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/Drop_Kunde.sql\" data-type=\"attachment\" data-id=\"199\">Drop_Kunde.sql<\/a>: zum Entfernen der Tabelle Kunde aus dem Schema Willibald der DWH-Datenbank und<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/Create_and_bulk_insert_Kunde.sql\" data-type=\"attachment\" data-id=\"200\">Create_and_bulk_insert_Kunde.sql<\/a>: zum Erzeugen der Tabelle Kunde im Schema Willibald der DWH-Datenbank und zum Einlesen der Schnittstelle in diese Tabelle<\/li>\n<\/ul>\n\n\n\n<p>Diese Skripte werden bei jeder Daten\u00fcbernahme ausgef\u00fchrt und f\u00fcllen die Tabelle Willibald.Kunde mit den aktuellen Daten aus der Schnittstelle.<\/p>\n\n\n\n<p>Au\u00dferdem wird die Information \u00fcber die Schnittstelle Willibald.Kunde in der dbt-Datei schema.yml als Source eingetragen, damit sie im dbt-Modell genutzt werden kann.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Erstellen des dbt-Modells f\u00fcr die Kundendaten <\/h4>\n\n\n\n<p>Im Skript 0201_psa.ps1 wird das Skript psa_wb_kunde.sql aufgerufen, mit dem die Tabelle <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/psa_wb_kunde.sql\" data-type=\"attachment\" data-id=\"201\">DATAVAULT_PSA.psa_wb_kunde<\/a>: die Tabelle f\u00fcr die Kundendaten in der Persistent Staging Area<\/li>\n<\/ul>\n\n\n\n<p>erstellt wird.<\/p>\n\n\n\n<p>Im Skript 0302_load.ps1 werden die Skripte aufgerufen, mit denen die folgenden Tabellen und Views erstellt werden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/raw_wb_kunde.sql\" data-type=\"attachment\" data-id=\"202\">DATAVAULT.raw_wb_kunde<\/a>: der Raw Stage View f\u00fcr die Kundendaten<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/stg_wb_kunde.sql\" data-type=\"attachment\" data-id=\"203\">DATAVAULT.stg_wb_kunde<\/a>: die Stage Tabelle f\u00fcr die Kundendaten<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/hub_wb_kunde.sql\" data-type=\"attachment\" data-id=\"204\">DATAVAULT.hub_wb_kunde<\/a>: der Hub Kunde<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/sat_wb_kunde.sql\" data-type=\"attachment\" data-id=\"207\">DATAVAULT.sat_wb_kunde<\/a>: der Satellit der Kundendaten am Hub Kunde<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/ls_wb_kunde_hk.sql\" data-type=\"attachment\" data-id=\"209\">DATAVAULT.ls_wb_kunde_hk<\/a>: die &#8220;Last Seen&#8221;-Tabelle, die anzeigt, wann ein Kunde in der Stage f\u00fcr die Kundendaten zuletzt gesehen worden ist<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/hub_wb_vereinspartner.sql\" data-type=\"attachment\" data-id=\"205\">DATAVAULT.hub_wb_vereinspartner<\/a>: der Hub Vereinspartner, der auch aus der Stage f\u00fcr Kundendaten bef\u00fcllt wird<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/ls_wb_kunde_hvp.sql\" data-type=\"attachment\" data-id=\"210\">DATAVAULT.ls_wb_kunde_hvp<\/a>: die &#8220;Last Seen&#8221;-Tabelle, die anzeigt, wann ein Vereinspartner in der Stage f\u00fcr die Kundendaten zuletzt gesehen worden ist<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/link_wb_kunde_vereinspartner.sql\" data-type=\"attachment\" data-id=\"206\">DATAVAULT.link_wb_kunde_vereinspartner<\/a>: der Link zwischen Kunde und VereinsPartner, der aus der Stage f\u00fcr Kundendaten bef\u00fcllt wird<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/sat_wb_kunde_vereinspartner.sql\" data-type=\"attachment\" data-id=\"208\">DATAVAULT.sat_wb_kunde_vereinspartner<\/a>: der Satellite der Kundendaten am Link zwischen Kunde und VereinsPartner, der aus der Stage f\u00fcr Kundendaten bef\u00fcllt wird<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/ls_wb_kunde_lkvp.sql\" data-type=\"attachment\" data-id=\"211\">DATAVAULT.ls_wb_kunde_lkvp<\/a>: die &#8220;Last Seen&#8221;-Tabelle, die anzeigt, wann eine Kombiation von Kunde und VereinsPartner in der Stage f\u00fcr die Kundendaten zuletzt gesehen worden ist<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/vlink_wb_kunde_vereinspartner.sql\" data-type=\"attachment\" data-id=\"212\">DATAVAULT.vlink_wb_kunde_vereinspartner<\/a>: der View auf den Link zwischen Kunde und VereinsPartner<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/vsat_wb_kunde_last.sql\" data-type=\"attachment\" data-id=\"214\">DATAVAULT.vsat_wb_kunde_last<\/a>: der View auf den letzten Stand im Satellit der Kundendaten am Hub Kunde<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/vsat_wb_kunde_seen.sql\" data-type=\"attachment\" data-id=\"213\">DATAVAULT.vsat_wb_kunde_seen<\/a>: der View auf alle St\u00e4nde im Satellit der Kundendaten am Hub Kunde<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/vsat_wb_kunde_vereinspartner_last.sql\" data-type=\"attachment\" data-id=\"216\">DATAVAULT.vsat_wb_kunde_vereinspartner_last<\/a>: der View auf den letzten Stand im Satellit der Kundendaten am Link zwischen Kunde und VereinsPartner<\/li>\n\n\n\n<li><a href=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/08\/vsat_wb_kunde_vereinspartner_seen.sql\" data-type=\"attachment\" data-id=\"215\">DATAVAULT.vsat_wb_kunde_vereinspartner_seen<\/a>: der View auf alle St\u00e4nde im Satellit der Kundendaten am Link zwischen Kunde und VereinsPartner<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Was ist die Bedeutung der &#8220;Last Seen&#8221;-Tabellen?<\/h4>\n\n\n\n<p>F\u00fcr jemanden, der die Prinzipien von Data Vault 2.0 kennt, ist es klar, welche Bedeutung die Hubs, Links und Satellites im Raw Vault haben. Und dass es sinnvoll sein kann, f\u00fcr den einfacheren Zugriff auf die Daten Views auf die Links und Satellites zu definieren, ist sicher auch verst\u00e4ndlich.<\/p>\n\n\n\n<p>Was aber sind die oben erw\u00e4hnten &#8220;Last Seen&#8221;-Tabellen?<\/p>\n\n\n\n<p>Satellites enthalten einen Record f\u00fcr jeden neuen Zustand der Daten. Was Satellites nicht leisten k\u00f6nnen, ist Auskunft dar\u00fcber zu geben, wann ein Datensatz einfach komplett aus der Datenlieferung verschwunden ist. Wenn ein Datensatz f\u00fcr einen Satelliten ab einem bestimmten Zeitpunkt in den gelieferten Daten nicht mehr vorkommt, dann bleibt der zuletzt \u00fcbernommene Datensatz weiterhin aktiv. Die &#8220;Last Seen&#8221;-Tabellen sind unsere L\u00f6sung, um dieses Problem zu l\u00f6sen. F\u00fc jede \u00dcbergabedatei in der Stage und f\u00fcr jeden darin definierten Hub und Link wird ein Satellite erstellt, der als einziges Feld den Timestamp des letzten Ladens als &#8220;LAST_SEEN&#8221; enth\u00e4lt. Dieser Satellite schreibt demnach zu jedem Ladezeitpunkt f\u00fcr jeden gelesenen Key einen neuen Datensatz.<\/p>\n\n\n\n<p>In einem nach der \u00dcbernahme ausgef\u00fchrten SQL-Skript werden f\u00fcr jeden Key alle Datens\u00e4tze au\u00dfer dem letzten aus der &#8220;Last Seen&#8221;-Tabelle gel\u00f6scht, so dass diese f\u00fcr jeden Key die Information enth\u00e4lt, wann dieser Key zuletzt in der Stage gesehen worden ist.<\/p>\n\n\n\n<p>Die Verwendung des AutomateDV-Makros f\u00fcr Satelliten dient zusammen mit dem SQL-Skript dazu, diese L\u00f6sung einfach umsetzen zu k\u00f6nnen. Ein eigenes Makro f\u00fcr solche LS-Tabellen w\u00e4re sicher eine interessante Weiterentwicklung des Konzepts.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Zusammenfassung<\/h4>\n\n\n\n<p>Insgesamt werden f\u00fcr die Kundendaten 19 Dateien ben\u00f6tigt, in denen Informationen zur \u00dcbertragung der Kundendaten in den Raw Vault des Data Warehouse bereitgestellt werden.<\/p>\n\n\n\n<p>Auch wenn in diesen Dateien bereits Makros aus dem dbt-Plugin AutomateDV verwendet werden, so ist der Aufwand, diese Dateien zu erstellen, doch immer noch viel zu gro\u00df. <\/p>\n\n\n\n<p>Wir haben deshalb eine einfache Steuersprache definiert, mit deren Hilfe die Informationen f\u00fcr alle diese Dateien in einer einzigen Steuerdatei bereitgestellt werden k\u00f6nnen. Die ben\u00f6tigten Tabellen werden dann aus dieser Steuerdatei generiert und in das dbt-Modell \u00fcbernommen. Wie das vor sich geht, ist der Inhalt eines der n\u00e4chsten Beitr\u00e4ge.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>In diesem Beitrag m\u00f6chte ich, wie zuvor bereits angek\u00fcndigt, ins Detail gehen und zeigen, wie wir die Daten von Willibald in das DWH \u00fcbernehmen. Der erste Schritt der \u00dcbernahme ins DWH ist das Exportieren der Daten aus dem operativen System von Willibald in die CSV-Dateien. Dieser Schritt wird hier nicht beschrieben. Die CSV-Dateien der Schnittstellen [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":232,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,14,18],"tags":[],"class_list":["post-191","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\/191","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=191"}],"version-history":[{"count":0,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/posts\/191\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/media\/232"}],"wp:attachment":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/media?parent=191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/categories?post=191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/tags?post=191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}