Een vereenvoudigd beheerscherm met de wizard voor een nieuwe tabel toont een raster van zeven laadwijzen. Voor de klanttabel licht de tegel voor de volledige momentopname op, waarbij rechts een verdwenen klant wordt afgesloten in plaats van verwijderd. Voor de orderregels wordt de tegel voor alleen wijzigingen gekozen, met de wijzigingsdatum als watermerkkolom, terwijl de tegel voor vervangen een waarschuwing krijgt dat historie wordt weggegooid.

De zeven laadwijzen en wanneer je welke kiest

De leverancier van de prijslijst zet elke nacht een bestand klaar met de volledige lijst. Sanne, de data-engineer van de groothandel, wil die lijst elke nacht opnieuw neerzetten. In het beheerscherm kiest ze bijna vervangen, omdat het woord klinkt als wat ze wil. Daarmee was elke oude prijs bij de eerstvolgende laadactie verdwenen.

Die keuze heet de laadwijze. Yres kent er zeven: zes bewaren historie en één gooit hem weg. Welke past, hangt af van wat een bron over zichzelf kan vertellen. Hieronder loopt Sanne langs de bronnen van de groothandel. Elke bron krijgt een andere laadwijze.

Gepubliceerd: · Laatst bijgewerkt: · Door , architect van Yres en oprichter van Plainwater

Wat bepaalt een laadwijze?

Een laadwijze bepaalt wat Yres met de historietabel doet als er opnieuw data geladen wordt. Je kiest hem per tabel in het beheerscherm.

Elke nacht komt per tabel een set rijen binnen in de landingszone. De motor vergelijkt die met wat er al in de historietabel staat. Daarvoor gebruikt hij twee vingerafdrukken: een van de sleutel en een van de inhoud. Hoe die werken, staat in ons artikel over historie bijhouden bij honderden tabellen. Elke rij valt zo in een van vier groepen:

  • Nieuw. De sleutel is onbekend.
  • Gewijzigd. De sleutel is bekend, de inhoud niet.
  • Ongewijzigd. Sleutel en inhoud zijn allebei bekend.
  • Niet meer aangeleverd. De rij staat in de historietabel, maar zit niet in de set van vannacht.

De laadwijze beantwoordt voor die groepen drie vragen. De zeven laadwijzen zijn zeven combinaties van antwoorden.

  1. Krijgt een gewijzigde rij een nieuwe versie, of wordt de oude overschreven?
  2. Blijft een rij die niet meer wordt aangeleverd staan, wordt hij afgesloten of verdwijnt hij?
  3. Schuift het watermerk na afloop op? Dat is de laatste wijzigingsdatum die de motor van de bron zag.

Sanne heeft de bronnen van de groothandel voor zich: het boekhoudpakket met 280 tabellen, het personeelssysteem met 40, het planningspakket met 20 en de webshop als API. Ze hoeft niet voor elke tabel apart na te denken, want de vraag is per bron dezelfde. Levert de bron elke nacht alles? Heeft hij een wijzigingsdatum per rij? Laat hij zien welke rijen verwijderd zijn? Uit die antwoorden volgt de laadwijze.

Welke zeven laadwijzen zijn er?

Twee laadwijzen werken met de volledige levering, twee met alleen de wijzigingen en twee zetten de hele tabel opnieuw neer. De zevende voegt alleen toe.

  • Bijwerken zonder afsluiten. Nieuwe rijen komen erbij. Een gewijzigde rij krijgt een nieuwe versie en de oude versie een einddatum. Rijen die niet meer worden aangeleverd, blijven actueel staan.
  • Volledige momentopname. Hetzelfde, met één verschil: elke rij die niet meer wordt aangeleverd, wordt afgesloten. De rij blijft bestaan met het moment van laden als einddatum, maar telt niet meer als actueel.
  • Alleen wijzigingen ophalen. De bron krijgt de vraag om alles wat sinds het watermerk is gewijzigd. Komt dezelfde sleutel twee keer voor in één laadactie, dan wint de rij met de laatste wijzigingsdatum. Rijen die niet zijn aangeleverd, blijven actueel. De motor kan niet zien of ze ongewijzigd zijn of verwijderd.
  • Delta-momentopname. Als alleen wijzigingen ophalen, met één stap erbij. Rijen die ontbreken en waarvan de wijzigingsdatum in het opgehaalde venster valt, worden afgesloten. Zo vang je verwijderingen op zonder elke nacht de hele tabel op te halen.
  • Herladen. Elke actuele rij wordt eerst afgesloten. Daarna komt de volledige set erin als nieuwe generatie. De vorige generatie blijft als historie staan.
  • Vervangen. De historietabel wordt eerst leeggemaakt en daarna gevuld met de nieuwe set. Alles van daarvoor is weg.
  • Alleen toevoegen. Elke aangeleverde rij wordt toegevoegd, zonder sleutel en zonder vergelijking. Dezelfde set twee keer laden levert dubbele rijen op.

Bij de twee laadwijzen met alleen wijzigingen schuift het watermerk na een geslaagde laadactie naar de hoogste wijzigingsdatum in de historietabel. Bij alleen toevoegen schuift het ook mee. In de tabel staan de keuzenamen zoals ze in het beheerscherm staan.

Keuze in het beheerschermNieuwe en gewijzigde rijenRijen die niet meer worden aangeleverdHistorieWatermerk
FULL (bijwerken zonder afsluiten)Toevoegen, gewijzigde rijen krijgen een nieuwe versieBlijven actueelBewaardNee
IMAGE (volledige momentopname)Als FULLAllemaal afgesloten, met het laadmoment als einddatumBewaardNee
DELTA (alleen wijzigingen)Als FULL, alleen voor de opgehaalde wijzigingenBlijven actueelBewaardSchuift op na geslaagd laden
DELTAIMAGE (delta-momentopname)Als DELTAAfgesloten als hun wijzigingsdatum in het opgehaalde venster valtBewaardSchuift op na geslaagd laden
RELOAD (herladen)Alle rijen komen als nieuwe generatie binnen, zonder vergelijkingAfgesloten, net als alle andere vorige rijenBewaardNee
OVERWRITE (vervangen)Alle rijen komen als nieuw binnen, zonder vergelijkingWegWegNee
ADDITIONAL (alleen toevoegen)Alles wordt toegevoegd, zonder sleutel of vergelijkingBlijven staanAlleen toevoegenSchuift op na geslaagd laden

Sanne kiest per bron

De klanttabel. Het boekhoudpakket exporteert elke nacht alle klanten, maar verwijderde klanten exporteert het niet meer. Sanne kiest daarom de volledige momentopname. Bakkerij Ter Horst verhuist op 2 oktober naar Deventer. De rij met Zwolle wordt afgesloten en er komt een versie met Deventer bij. Met de 300 klanten die niet veranderden, gebeurt niets. Wielinga Interieur wordt na een fusie uit het pakket verwijderd. De rij wordt afgesloten met het moment van de laadactie, maar blijft bestaan. De orders uit maart wijzen dus nog naar een klant die bestaat. Een rapport over vandaag telt Wielinga niet meer mee.

De orderregels. Dit zijn 40 miljoen rijen, elk met een wijzigingsdatum. Alles elke nacht ophalen zou uren duren. Sanne kiest daarom alleen wijzigingen ophalen, met de wijzigingsdatum als watermerkkolom. De eerste nacht is de historietabel leeg en bestaat er geen watermerk, dus haalt de motor alles op. Daarna vraagt Yres elke nacht om alles vanaf en met het watermerk. Regels die op dat moment zelf zijn gewijzigd, komen zo een keer extra mee. De vingerafdruk ziet dat de inhoud gelijk is, dus er komt geen nieuwe versie.

Sommige bronnen leveren rijen na. Het boekhoudpakket stempelt de wijzigingsdatum van een orderregel op het moment dat een medewerker de regel opent. Opgeslagen wordt de regel pas als de medewerker klaar is. Wordt er in dat kwartier geladen, dan heeft de regel een wijzigingsdatum van vóór het watermerk. De volgende nacht vraagt Yres alleen om wat erna komt. Die regel komt dan nooit meer mee. Daarvoor is het terugkijkvenster. Per tabel geef je op hoe ver de vraag aan de bron terug mag kijken, als een getal met een eenheid, bijvoorbeeld een dag of een uur. De laadactie vraagt dan om alles vanaf het watermerk min dat venster. Rijen die al binnen waren, houdt de vingerafdruk tegen. Rijen die te laat kwamen, komen alsnog binnen.

De urenregistratie. Het personeelssysteem heeft ook een wijzigingsdatum, maar hier worden rijen verwijderd. Een medewerker boekt vier uur op het verkeerde project, verwijdert de regel en boekt opnieuw. Met alleen wijzigingen ophalen blijft de foute regel actueel staan, omdat de motor hem nooit meer te zien krijgt. Sanne kiest daarom de delta-momentopname, met een terugkijkvenster van een week. Elke nacht komt binnen wat de afgelopen week is gewijzigd. De motor sluit ook elke actuele rij af die ontbreekt en waarvan de wijzigingsdatum in die week valt. Zo wordt de verwijderde regel afgesloten. Een regel van drie maanden geleden die vandaag wordt verwijderd, valt buiten het venster en blijft staan.

Het bezoekerslogboek. De webshop levert een logboek van bezoeken. Elke regel is een gebeurtenis die nooit meer verandert. Een sleutel bestaat er niet voor. Sanne kiest alleen toevoegen, met het tijdstip van de gebeurtenis als watermerkkolom. Elke nacht komen de nieuwe gebeurtenissen erbij, zonder dat er iets wordt vergeleken.

De planning. Het planningspakket exporteert alleen de planning van de komende acht weken. Wat daarbuiten valt, komt niet meer mee, al bestaat het nog wel. Hier kiest Sanne bijwerken zonder afsluiten. Gewijzigde planregels krijgen een nieuwe versie. Regels die uit het venster van acht weken vallen, blijven actueel staan.

De meest gemaakte fout: vervangen of herladen

Terug naar de prijslijst. Het bestand van de leverancier bevat elke nacht de volledige lijst, zonder wijzigingsdatum per regel. In het beheerscherm staan twee keuzes die op elkaar lijken: vervangen en herladen.

Vervangen maakt de historietabel leeg voordat de nieuwe lijst erin gaat. De lijst van gisteren is dan weg, net als die van vorige maand. Een vraag als 'wat kostte dit artikel toen die order werd geplaatst' is vanaf dat moment niet meer te beantwoorden. Ook de interne volgnummers van de rijen beginnen opnieuw.

Herladen sluit eerst elke actuele rij af, met het tijdstip van de laadactie als einddatum. Daarna gaat de nieuwe lijst erin als nieuwe generatie. Alle oude generaties blijven staan, dus de vraag over de prijs van toen is gewoon te beantwoorden.

Sanne kiest herladen. Twee dingen zijn daarbij goed om te weten:

  • De tabel groeit elke nacht. Herladen vergelijkt niet, dus de volledige lijst komt er elke keer bij, ook als er niets veranderde. Voor een prijslijst van 4.000 regels is dat geen probleem. Bij een tabel van 40 miljoen rijen past de volledige momentopname beter, die alleen gewijzigde rijen een nieuwe versie geeft.
  • Einddatums schuiven mee. Herladen zet bij elke laadactie de einddatum van alle oudere rijen opnieuw, ook van rijen die al eerder waren afgesloten. Wie historie reconstrueert op de einddatum, moet daar rekening mee houden.

Wanneer kies je welke?

Kies op wat de bron kan vertellen: levert hij alles, heeft hij een betrouwbare wijzigingsdatum en laat hij verwijderingen zien? Drie gevallen uit de praktijk laten zien hoe dat uitpakt.

Een bron die alles levert zonder wijzigingsdatum. Het boekhoudpakket van een kleinere vestiging exporteert elke nacht de hele artikeltabel als bestand. Er is geen kolom die zegt wat er veranderd is. Dat hoeft ook niet, want de volledige momentopname vergelijkt elke rij op de vingerafdruk. Alleen echte wijzigingen worden een versie en verdwenen artikelen worden afgesloten. Moeten verdwenen rijen juist blijven staan, dan kies je bijwerken zonder afsluiten.

Een bron met een wijzigingsdatum die soms achterloopt. De webshop stempelt de wijzigingsdatum van een order bij het begin van het afrekenen. Een order die rond het laden wordt afgerond, heeft dan een datum van vóór het watermerk. Hier past alleen wijzigingen ophalen, met een terugkijkvenster van een dag. De orders van gisteren komen dubbel mee en de vingerafdruk houdt ze tegen. De late order komt alsnog binnen.

Een bron waarin rijen verdwijnen zonder spoor. Het personeelssysteem laat medewerkers hun eigen urenregels verwijderen. Een verwijderde regel wordt daarna niet meer aangeleverd. Hier past de delta-momentopname, met een venster dat de correctieperiode dekt. Mag een medewerker uren van drie weken terug nog corrigeren, dan is het venster drie weken. Verwijderingen van daarvóór worden niet gezien. Is dat niet acceptabel, dan is de volledige momentopname de enige zekere keuze.

Wil je één keer anders laden, dan hoef je de instelling niet te wijzigen. Het beheerscherm biedt per laadactie vier van de zeven laadwijzen als eenmalige keuze.

Waar het ophoudt

  • Een laadwijze werkt op wat de bron aanlevert. Een verwijdering die de bron niet laat zien, vangt alleen de volledige momentopname op
  • Het terugkijkvenster vangt late rijen op, maar geen fouten in de wijzigingsdatum zelf. Een bron die de datum niet bij elke wijziging bijwerkt, is geen deltabron
  • Alleen toevoegen kent geen sleutel. Dezelfde set twee keer laden geeft dubbele rijen

Veelgestelde vragen

Welke laadwijze kies ik als ik twijfel?

De volledige momentopname, zolang de bron elke keer alles levert. Die bewaart historie, sluit verdwenen rijen af en vraagt geen wijzigingsdatum. Alleen wijzigingen ophalen kies je pas als de tabel te groot is om elke nacht volledig op te halen. Vervangen kies je nooit uit twijfel.

Wanneer is vervangen wel de juiste keuze?

Als historie geen betekenis heeft. Denk aan een kalendertabel die je zelf opnieuw laat genereren, een lijst met landcodes of een tabel die je één keer helemaal wilt resetten. Kan iemand ooit vragen hoe het vorige week was, kies dan herladen.

Wat als mijn bron geen wijzigingsdatum heeft, maar wel een aanmaakdatum of boekdatum?

Dan gebruik je die datum als watermerkkolom, met een terugkijkvenster erbij. Yres vraagt dan elke nacht om bijvoorbeeld de laatste 14 dagen of de lopende boekperiode. Rijen die binnen die periode nog zijn aangepast, komen zo mee. Een rij die buiten het venster verandert, zie je niet. Hoe groot je het venster maakt, staat in ons artikel over delta laden met een wijzigingsdatum die je niet helemaal vertrouwt.

Wat gebeurt er met het watermerk als het laden mislukt?

Het blijft staan, want het watermerk schuift pas op als het laden helemaal is afgerond. Het monitoringscherm meldt dat het niet is opgeschoven. De volgende geslaagde laadactie haalt het verschil vanzelf opnieuw op, zodat je niets hoeft te herstellen.

Mijn bron heeft een aanmaakdatum en een wijzigingsdatum apart. Welke kies ik?

Allebei. Je kunt per tabel een tweede watermerkkolom opgeven, van hetzelfde datatype als de eerste. De motor neemt dan per rij de hoogste van de twee. Een nieuwe order zonder wijzigingsdatum komt mee op zijn aanmaakdatum, een gewijzigde order op zijn wijzigingsdatum. Dat werkt voor alle databasebronnen en voor een aantal API-bronnen.

Praat met een data-architect

In 30 minuten kijkt een data-architect met je mee naar je huidige dataomgeving en waar het nu wringt.

Plan een gesprek →

Verder lezen

Datawarehouse-automatisering die in je eigen Azure draait

Gebouwd voor organisaties op Azure en Power BI. Yres koppelt je bronnen, bewaart de historie en rolt wijzigingen gecontroleerd uit, zonder handwerk.