SQL-basierte SCD2-Versionierung hierarchischer Strukturen Meik Truschkowski nobilia-werke J. Stickling GmbH & Co. KG Verl Projektleiter Business Intelligence und Data Warehousing 1 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
Problem: Historisierung (Versionierung) Person (Teamleiter) Person (Sachbearbeiter) Team Sachbearbeiter (Platz) Kunde 2 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
Änderungen in den Quelldaten Team Teamleiter Team BK Name Team BK Team Pers BK gültig ab Mitarbeiter T01 T02 Team Eins Team Zwei T01 P03 01.07.2011 T01 P04 19.04.2016 T02 P05 01.08.2013 Person BK P01 P02 P03 Name Ernst Zacharias Doris Sachbearbeiter / Team SB BK Team BK gültig ab S01 T01 01.08.2011 S02 T01 01.12.2013 S02 T02 20.03.2016 Sachbearbeiter-Zuordnung SB BK SB Person BK gültig ab S01 P09 01.03.2012 S01 P07 10.01.2016 S02 P06 01.09.2011 P04 P05 P06 P07 P08 P09 Viktor Fritz Heinz Sandra Anton Nadine S02 P08 12.12.2015 S02 P09 25.04.2016 Sachbearbeiter-Plätze SB BK S01 S02 Kunden-Zuordnung Kunde BK SB BK gültig ab K4711 S01 01.12.2012 K4711 S02 20.03.2016 Kundenstamm Kunde BK Name gültig ab K4711 Kuno GmbH 01.03.2012 K4711 Kuno AG 09.02.2016 3 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
Zeitleiste Nov 2015 Dez 2015 Jan 2016 Feb 2016 Mrz 2016 Apr 2016 Mai 2016 Jun 2016 Jul 2016 Team: Teamleiter T02: P05 (Fritz) T01: P03 (Doris) T01: P04 (Viktor) SB-Platz: Team SB-Platz: SB-Person Kunde: SB-Platz S02: T01 S02: T02 S01: T01 S02: P06 (Heinz) S02: P08 (Anton) S02: P09 (Nadine) Sachbearbeiter Team S01: P09 (Nadine) S01: P07 (Sandra) Kunde K4711: S01 K4711: S02 Kunde (Inhalt) K4711: Kuno GmbH K4711: Kuno AG Person Version = Kunde SK 1 1 2 23 4 2 3 5 Person 4 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
Ergebnismenge kleinstmögliche Zeitscheiben KUNDE SK KUNDE BK KUNDE_NAME SB BK SB PERSON BK TEAM BK TEAM PERSON BK GÜLTIG AB GÜLTIG_BIS 1 K4711 Kuno GmbH S01 P09 T01 T03 01.01.2000 09.02.2016 2 K4711 Kuno GmbH S01 P07 T01 T03 10.01.2016 08.02.2016 3 K4711 Kuno AG S01 P07 T01 T03 09.02.2016 19.03.2016 4 K4711 Kuno AG S02 P08 T02 P05 20.03.2016 24.04.2016 5 K4711 Kuno AG S02 P09 T02 P05 25.04.2016 31.12.9999 KIMBALL! 5 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
nun zur Lösung in SQL Moment mal in SQL??? Als Skript? Es gibt doch moderne ETL-Tools!? 6 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
SQL Hybrides ETL ELT Was heißt hier eigentlich Plattform-unabhängig? zentrales Data Warehouse (RDBMS) ETL- bzw. ELT-Werkzeug Oracle DB mysql SQL Server DB2 Views mit der Transformationslogik Stored Procedures und Functions Metadaten (in Tabellen) Schlüsselvergabe (Sequence, Identity) Ablaufsteuerung Extraktion und Laden von externen Quellen in das DWH (Bulk Insert) DML-Aktionen SCD2-Handling Merge/Upsert-Handling Monitoring / Logging Oracle ODI Oracle OWB Informatica Microsoft SSIS SAP BODI IBM DataStage Talend Pentaho Teradata 7 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
Argumente für und gegen hybrides ELT Warum das so toll ist oder auch nicht + - SQL-Code allgemein verständlich Rapid Prototyping ANSI-Standard Einflussnahme auf die Performance Stored Procedures SQL-Kenntnisse notwendig kein zeilenbasiertes ETL Magic Numbers Dokumentation (Data Lineage) manuell 8 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
Zurück zur Lösung Voraussetzungen Gültigkeitsdatum: beide Datumsspalten für Zuordnung zu Fakten notwendig einheitliches Start-Datum der ersten Versionen (01.01.2000) einheitliches End-Datum der gültigen Version (31.12.9999) keine Lücken keine Überlappungen In der Demo werden die Gültigkeitsregeln im SQL-Skript sichergestellt! SQL-Dialekt: Common Table Expressions (CTE) Greatest() und Least()-Funktionen Case When Then Else bzw. Iif oder ähnliches Konstrukt 9 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
weiter mit der Lösung Variante 1 Eine einzige Ergebnis-Tabelle Ein Transformationsschritt (ein SQL- Statement) Referenzierung nur auf Version des Kunden möglich keine Referenzierung auf Version von SB- Platz oder Team möglich Gute Lösung, wenn keine Hierarchien zwischen den Dimensionen bestehen! 10 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
weiter mit der Lösung Variante 2 Drei Transformationsschritte (drei SQL-Statements) jeweils einzelne versionierte Tabellen für Team und SB-Platz Referenzierung in der Kunden-Tabelle auf deren SKs Star-Schema-Tabelle als View 11 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
Demonstration der Lösung in Variante 2 reines SQL (Oracle) kein ETL/ELT-Tool im Beispiel alle Tabellen/Views im Schema TEST Demo im SQL*Plus Die gezeigte Lösung funktioniert übrigens auch mit Parent-Child-Hierarchien. Dabei muss allerdings rekursives SQL (mit verschachtelten CTEs) angewendet werden! 12 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
13 SQL-basierte SCD2-Versionierung hierarchischer Strukturen Data Lineage manuell mit VISIO
Probleme und Lösungen? Wie bekommt man seine Versionen sauber? Wenn? Komponente ohne Versionen Lücken oder Überlappungen nur eine der beiden Datumsspalten vorhanden erste Parent-Version ist erst später gültig als erste Child-Version Late arriving Facts Gültigkeiten ändern sich nachträglich und rückwirkend (vor allem bei Zuordnungen) dann! eine Version mit dem ersten Gültig-ab- und finalen Gültig-bis-Datum erzeugen eine der Datumsspalten als führend bestimmen, danach die fehlende Spalte in SQL errechnen fehlende Spalte in SQL errechnen (Sub-Select) einheitliches erstes Gültig-ab- und finales Gültig-bis- Datum verwenden bei der jeweils letzten Version immer das finale Gültig-bis-Datum verwenden a) bitemporale Datenhaltung in Dimensionen und Fakten (noch nicht ausprobiert) b) Dimension neu aufbauen, Fakten neu schlüsseln (Informationsverlust) 14 SQL-basierte SCD2-Versionierung hierarchischer Strukturen
noch Antworten? 15 SQL-basierte SCD2-Versionierung hierarchischer Strukturen