Ik ben een luie programmeur! Dat was een belangrijk detail dat ik van Roelant Vos leerde in zijn training vorige week. Maar er waren nog veel meer interessante onderwerpen. Een persoonlijke samenvatting van een 3-daagse cursus over Data Warehouse Design Patterns.
Vorige week was ik in de gelegenheid om de cursus Data Warehouse Design Patterns van Roelant Vos bij te wonen. Ik heb Roelant gezien in presentaties op data modeling conferenties, en ik waardeer zijn blog met veel nuttige informatie over Data Warehouse architectuur en Data Vault implementatie. Dus, toen ik van mijn Trivadis collega’s de informatie kreeg dat hij een training in Zurich zou geven, greep ik de kans om aan deze 3-daagse cursus deel te nemen.
Ik zal in deze blog post niet een gedetailleerde bespreking van de hele cursus schrijven. Maar in de volgende regels vindt u enkele opmerkingen over drie onderwerpen die – vanuit mijn oogpunt – belangrijk waren in deze training: Pattern Based Design, Persistent Staging Area en Virtual Data Warehouse.
Een typische data warehouse architectuur bestaat uit meerdere lagen voor het laden, integreren en presenteren van bedrijfsinformatie uit verschillende bronsystemen. Het aantal en de namen van de lagen kunnen per systeem verschillen, maar in de meeste omgevingen worden de gegevens van de ene laag naar de andere gekopieerd met ETL-tools of pure SQL-statements. Met een goede architectuur zijn de patronen om de gegevens in een bepaalde laag te transformeren en te laden altijd gelijk. Dit maakt het eenvoudiger (en sneller) om de ETL processen te ontwikkelen, omdat de herhaalbare patronen kunnen worden gegenereerd met data warehouse automation (DWA) tool. Op Roelants blog is een overzicht te vinden van zijn Data Integration Framework. Code voorbeelden zijn beschikbaar op GitHub.
Waarom ben ik een luie programmeur? Net als veel andere ontwikkelaars, hou ik er niet van om repetitieve code te schrijven. Roelant is ook een luie programmeur. Daarom heeft hij veel tijd gestoken in het ontwikkelen van tools en methoden om de ontwikkeltaken te versnellen door het genereren van de SQL code om data warehouses te bouwen en te laden. Tijdens de cursus legde hij veel ontwerppatronen uit met de SQL generator VDW (Virtual Data Warehouse). Deze kan gratis van zijn website worden gedownload en is nuttig voor snelle prototypes en regressietests van patroonwijzigingen.
Persistent Staging Area
Een belangrijke laag in de voorgestelde architectuur is de PSA (Persistant Staging Area). Hoewel dit gebied van de staging-laag optioneel is, is het zeer praktisch en zeer aan te bevelen, vooral wanneer de zakelijke eisen aan het begin van het project nog niet duidelijk zijn. De PSA is een historisch archief van de gegevens uit de bronsystemen en vervangt de klassieke vluchtige Staging Area. De PSA wordt geladen met CDC-mechanismen (Change Data Capture) of met een deltadetectie tussen het bronsysteem en de huidige versie van de PSA. Het Persistent Staging Area is de unieke bron voor het laden van de Data Vault tabellen (Hubs, Links en Satellites) in de Integration Layer.
Het voordeel van een Persistent Staging Area is dat alleen de op dat moment vereiste delen van de informatie in de Data Vault tabellen hoeven te worden geladen. We hoeven ons niet te bekommeren om toekomstige vereisten, omdat de oorspronkelijke gegevens nog steeds beschikbaar zijn in de PSA en opnieuw kunnen worden geladen wanneer ze nodig zijn. Ik heb deze aanpak in verschillende klantprojecten gezien en gebruikt, en het is een goede verzekering tegen onbekende business requirements.
Virtual Data Warehouse
Toen ik Roelant Vos voor het eerst zag op de Data Modeling Zone 2017 conferentie in Düsseldorf, was ik erg onder de indruk van een interessante architectuur aanpak die hij uitlegde: De enige persistente laag van een datawarehouse is de PSA, en al het andere wordt geïmplementeerd bovenop de PSA-tabellen met views. Dit is de consistente implementatie van een Virtueel Data Warehouse dat wordt ondersteund door Roelant’s VDW software. Ik heb dit in theorie en in sommige presentaties gezien, maar nooit in zijn volledige vorm in een echt project.
Deze “NoETL” aanpak heeft verschillende voordelen: 1. Het is heel gemakkelijk om de transformatie logica te veranderen zonder alle lagen van uw data warehouse te herladen. 2. Zodra nieuwe gegevens in de PSA-laag worden geladen, zijn ze onmiddellijk zichtbaar in alle volgende lagen. 3. Het is een soort schema-on-read data warehouse waarbij je op query tijd kunt beslissen hoe de brongegevens geïnterpreteerd moeten worden. Dat klinkt allemaal heel mooi, maar ik zie nog steeds de uitdaging van goede query performance. Ik denk dat, in de meeste situaties, op zijn minst de veelgebruikte gegevens moeten worden geperst. Maar met de view benadering kan dat zonder veel moeite, bijvoorbeeld met materialized views.
De 3-daagse cursus heeft mijn verwachtingen meer dan waargemaakt. Hoewel ik sommige concepten zelf al gebruikte (om eerlijk te zijn was het meeste van wat Roelant uitlegde me al bekend), vond ik de stapsgewijze opbouw van een data warehouse architectuur met behulp van veel code voorbeelden en live demo’s erg goed. Of zoals ik als spontane feedback aan het einde van de cursus zei: “Het was leuk”.