{"id":325,"date":"2024-10-29T20:09:04","date_gmt":"2024-10-29T20:09:04","guid":{"rendered":"https:\/\/oberle-it-beratung.de\/?p=325"},"modified":"2024-10-29T20:09:04","modified_gmt":"2024-10-29T20:09:04","slug":"wenn-datensaetze-verschwinden","status":"publish","type":"post","link":"https:\/\/www.elrebo.de\/index.php\/2024\/10\/29\/wenn-datensaetze-verschwinden\/","title":{"rendered":"Wenn Datens\u00e4tze verschwinden &#8230;"},"content":{"rendered":"\n<p>In einem Data Warehouse nach Data Vault 2.0 kann man sehr gut erkennen, wenn sich die Daten zu einem Gesch\u00e4ftsobjekt ver\u00e4ndern. Bei jeder \u00c4nderung wird ein neuer Datensatz mit dem aktuellen Ladedatum in den zugeh\u00f6rigen Satelliten eingetragen. Man kann an diesem Satelliten aber nicht erkennen, wenn der Datensatz zu diesem Gesch\u00e4ftsobjekt irgendwann wieder aus dem operativen System verschwindet. Der zuletzt eingetragene Datensatz bleibt im Satelliten erhalten und die Information, dass das Gesch\u00e4ftsobjekt &#8220;verschwunden&#8221; ist, muss im Data Warehouse auf andere Art dokumentiert werden. <\/p>\n\n\n\n<p>In diesem Beitrag geht es darum, wie das Verschwinden von Datens\u00e4tzen im Data Warehouse dokumentiert werden kann.<\/p>\n\n\n\n<p>Mein erster Ansatz, das Verschwinden von Datens\u00e4tzen zu dokumentieren, habe ich bereits im Artikel <a href=\"https:\/\/elrebo.de\/willibald-data-uebernahme-der-kunden-ins-data-warehouse\" data-type=\"post\" data-id=\"191\">Willibald-Data: \u00dcbernahme der Kunden ins Data Warehouse<\/a> im Absatz &#8220;Was ist die Bedeutung der \u201eLast Seen\u201c-Tabellen?&#8221; beschrieben. Es handelt sich dabei um Satelliten, deren einzige Payload das Ladedatum ist. Da sich das Ladedatum bei jeder \u00dcbernahme der Daten ver\u00e4ndert, enth\u00e4lt dieser Satellit einen Datensatz f\u00fcr jeden Zeitpunkt, an dem der Datensatz im operativen System vorhanden war. Da nur der zuletzt geschriebene Satz relevant ist, werden &#8211; um Platz zu sparen &#8211; alle \u00e4lteren S\u00e4tze \u00fcber ein SQL-Skript gel\u00f6scht. Dieses Verfahren hat den Vorteil, dass es wenig Speicherplatz ben\u00f6tigt. Es kann aber nicht abbilden, wenn ein Datensatz verschwindet und sp\u00e4ter wieder auftaucht. Diese Datenl\u00fccke wird \u00fcber dieses Verfahren nicht dokumentiert.<\/p>\n\n\n\n<p>Besser w\u00e4re es nat\u00fcrlich, wenn nicht mehr g\u00fcltige Datens\u00e4tze im operativen System nicht einfach gel\u00f6scht werden w\u00fcrden, sondern nur das Ende der G\u00fcltigkeit vermerkt werden w\u00fcrde. Das Ende der G\u00fcltigkeit w\u00e4re dann ein ganz normales Datenfeld im Payload des Satelliten. Aber unser Data Warehouse muss ja auch mit anderen operativen Systemen arbeiten k\u00f6nnen.<\/p>\n\n\n\n<p>Eine weitere M\u00f6glichkeit bieten Systeme, die Change Data Capture (CDC) implementiert haben. Dabei werden alle Daten\u00e4nderungen kommuniziert und dazu geh\u00f6rt auch das L\u00f6schen der Daten. Auch hier ist das Ende der G\u00fcltigkeit eine Information im CDC-Satelliten.<\/p>\n\n\n\n<p>Da ich, wie oben bereits angedeutet, mit meiner ersten Implementierung (den &#8220;Last Seen&#8221;-Tabellen) nicht ganz zufrieden war, habe ich eine bessere L\u00f6sung gesucht und bin im Buch &#8220;<a href=\"http:\/\/Building a Scalable Data Warehouse with Data Vault 2.0\">Building a Scalable Data Warehouse with Data Vault 2.0<\/a>&#8221; von Dan Linstedt und Michael Olschimke auf die Record Tracking Satellites (RTS) gesto\u00dfen.<\/p>\n\n\n\n<p>Bei meiner Suche nach einem RTS-Makro in dem Toolset AutomateDV, das ich f\u00fcr die Umsetzung unseres DWH benutze, bin ich dann auf die Extended Tracking Satellites (XTS) gesto\u00dfen, die 2019 von Certus Solutions als Erg\u00e4nzung von DV2.0 auf der wwdvc-Konferenz vorgeschlagen worden sind. Eine Beschreibung davon gibt es in diesem Artikel von Patrick Cuba, den er 2021 auf Medium ver\u00f6ffentlicht hat: &#8220;<a href=\"https:\/\/patrickcuba.medium.com\/data-vault-2-0-has-a-new-hero-a8335d961210\">Data Vault 2.0 has a new hero&#8230;<\/a>&#8220;.<\/p>\n\n\n\n<p>Die Beschreibung der XTS-Satelliten in AutomateDV steht hier: <a href=\"https:\/\/automate-dv.readthedocs.io\/en\/latest\/tutorial\/tut_xts\/\">https:\/\/automate-dv.readthedocs.io\/en\/latest\/tutorial\/tut_xts\/<\/a> F\u00fcr jeden Hub und jeden Link wird ein XTS-Satellit angelegt, der die Tracking-Informationen f\u00fcr jeden Satelliten enth\u00e4lt, der an dem Hub bzw. Link definiert ist. <\/p>\n\n\n\n<p>In meinen Daten der Willibald-Challenge habe ich diese Situation:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stage wb_kd: die Kundendaten aus dem Webshop\n<ul class=\"wp-block-list\">\n<li>Hub kd: der Hub Kunde\n<ul class=\"wp-block-list\">\n<li>Satellit sat_wb_kd_hub_kd_1: <br>der 1. Satellit am Hub Kunde aus der Stage Webshop-Kunden<\/li>\n\n\n\n<li>Satellit sat_wb_kd_hub_kd_2: <br>der 2. Satellit am Hub Kunde aus der Stage Webshop-Kunden<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Stage wb_wo: die Wohnorte der Kunden aus dem Webshop\n<ul class=\"wp-block-list\">\n<li>Hub kd: der Hub Kunde\n<ul class=\"wp-block-list\">\n<li>Satellit mas_wb_wo_hub_kd:<br>der Multi-Active-Satellite am Hub Kunde aus der Stage Webshop-Wohnorte<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Stage rs_best: die Bestellungen aus der Roadshow\n<ul class=\"wp-block-list\">\n<li>Hub kd: der Hub Kunde\n<ul class=\"wp-block-list\">\n<li>Satellit sat_rs_best_hub_kd<br>der Satellit am Hub Kunde aus der Stage Roadshow-Bestellungen<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Es gibt vier Satelliten am Hub Kunde, die aus drei verschiedenen Stages bedient werden. Die XTS-Tabelle enth\u00e4lt einen Eintrag f\u00fcr jeden Record in jedem der vier Satelliten.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"384\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-30-um-20.37.01-1024x384.png\" alt=\"\" class=\"wp-image-338\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-30-um-20.37.01-1024x384.png 1024w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-30-um-20.37.01-300x112.png 300w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-30-um-20.37.01-768x288.png 768w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-30-um-20.37.01-1536x576.png 1536w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-30-um-20.37.01-2048x767.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Bei der Umsetzung der XTS-Tabellen musste ich feststellen, dass die Implementierung des XTS-Makros im Toolset AutomateDV nicht mit der Situation umgehen kann, dass die XTS-Tabelle aus mehreren Stages aufgebaut wird. Mehrere Satelliten aus der gleichen Stage sind kein Problem. Wendet man das XTS-Makro nur auf eine Stage an, dann funktioniert es gut. Deshalb baue ich zun\u00e4chst drei XTS-Tabellen auf (f\u00fcr jede Stage eine) und kombiniere sie dann in einem View \u00fcber ein Union-Select.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"656\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.11.57-1024x656.png\" alt=\"\" class=\"wp-image-328\" style=\"width:650px;height:auto\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.11.57-1024x656.png 1024w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.11.57-300x192.png 300w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.11.57-768x492.png 768w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.11.57-1536x984.png 1536w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.11.57.png 1626w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"737\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.18-1024x737.png\" alt=\"\" class=\"wp-image-329\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.18-1024x737.png 1024w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.18-300x216.png 300w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.18-768x553.png 768w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.18-1536x1106.png 1536w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.18.png 1686w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"675\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.38-1024x675.png\" alt=\"\" class=\"wp-image-330\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.38-1024x675.png 1024w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.38-300x198.png 300w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.38-768x506.png 768w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.38-1536x1012.png 1536w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.12.38.png 1642w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"467\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.13.06-1024x467.png\" alt=\"\" class=\"wp-image-331\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.13.06-1024x467.png 1024w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.13.06-300x137.png 300w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.13.06-768x350.png 768w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.13.06.png 1044w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Alle Informationen, die ben\u00f6tigt werden, um diese XTS-Tabellen und Views zu erzeugen, sind bereits in der Steuerdatei RawVault.xml in meinem <a href=\"https:\/\/elrebo.de\/dry-and-coc\">Generierungs-Tool GenRawVault<\/a> enthalten. Ich musste also nur noch den Generator f\u00fcr die xts- und vxts-Skripte bereitstellen und den Generator f\u00fcr die stg-Skripte etwas erweitern, um XTS-Tabellen f\u00fcr alle Hubs und Links zu erzeugen.<\/p>\n\n\n\n<p>Und wof\u00fcr man so eine XTS-Tabelle nutzen kann, zeige ich in diesem Beispiel f\u00fcr einen View auf den Satelliten sat_wb_kd_hub_kd_1, der im Datenfeld LAST_SEEN anzeigt, wann der Datensatz zuletzt im operativen System gesehen wurde.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"849\" height=\"1024\" src=\"https:\/\/elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.26.58-849x1024.png\" alt=\"\" class=\"wp-image-332\" srcset=\"https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.26.58-849x1024.png 849w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.26.58-249x300.png 249w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.26.58-768x927.png 768w, https:\/\/www.elrebo.de\/wp-content\/uploads\/2024\/10\/Bildschirmfoto-2024-10-29-um-19.26.58.png 1172w\" sizes=\"auto, (max-width: 849px) 100vw, 849px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>In einem Data Warehouse nach Data Vault 2.0 kann man sehr gut erkennen, wenn sich die Daten zu einem Gesch\u00e4ftsobjekt ver\u00e4ndern. Bei jeder \u00c4nderung wird ein neuer Datensatz mit dem aktuellen Ladedatum in den zugeh\u00f6rigen Satelliten eingetragen. Man kann an diesem Satelliten aber nicht erkennen, wenn der Datensatz zu diesem Gesch\u00e4ftsobjekt irgendwann wieder aus dem [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":335,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,14,15],"tags":[22,35,51,64],"class_list":["post-325","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dwh","category-dv20","category-genrawvault","tag-automatedv","tag-dwh","tag-rts","tag-xts"],"_links":{"self":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/posts\/325","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=325"}],"version-history":[{"count":0,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/posts\/325\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/media\/335"}],"wp:attachment":[{"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/media?parent=325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/categories?post=325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.elrebo.de\/index.php\/wp-json\/wp\/v2\/tags?post=325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}