Blog · 6 augustus 2026
Idempotentie is het grootste deel van het werk
Elke pipeline wordt opnieuw gedraaid. Na een storing, na een fix, nadat iemand twee keer op de knop drukt. Of dat routine is of een incident, wordt bepaald bij het ontwerp.
2 min lezen
Een pipeline wordt opnieuw gedraaid. Niet misschien, maar zeker. Het netwerk valt halverwege weg, iemand herstelt een bug en laadt een week opnieuw, een beheerder weet niet zeker of de job klaar was en start hem nog een keer.
De enige echte vraag is wat er de tweede keer gebeurt. Als opnieuw draaien veilig en saai is, worden de meeste operationele problemen klein. Zo niet, dan wordt elke storing een onderzoek naar de staat waarin de data zich bevindt.
Toevoegen is de valkuil
De eenvoudigste manier van laden is een insert, en inserts zijn niet idempotent. Draai het bestand van gisteren twee keer en gisteren bestaat twee keer. Er komt geen foutmelding. Het aantal rijen ziet er plausibel uit. De omzet is voor één dag stilletjes verdubbeld, en dat wordt weken later ontdekt door iemand die zich herinnert dat die dinsdag niet zó goed was.
De oplossing is om het laden op een toestand te richten in plaats van op een gebeurtenis: deze sleutel moet uiteindelijk deze waarden hebben. Of dat een merge is, een upsert of delete-then-insert voor een afgebakende partitie, doet er minder toe dan de eigenschap: twee keer draaien geeft hetzelfde resultaat als één keer.
Je hebt een sleutel nodig die iets betekent
Mergen vereist dat je weet wat een rij tot dezelfde rij maakt. Een surrogaat-id dat bij het laden wordt gegenereerd kan dat niet; dat is per definitie bij elke run anders.
Je hebt dus een bedrijfssleutel nodig: een ordernummer, een transactiereferentie, een combinatie van bronsysteem en bron-id. Als de bron echt geen stabiele sleutel heeft, is het de moeite waard om dat vroeg te melden, want elke ontdubbelingsstrategie verderop in de keten is dan giswerk dat daarop voortbouwt.
Als je niet kunt zeggen wat twee rijen tot dezelfde rij maakt, kun je het laden niet herhaalbaar maken. Alles daarna is hoop.
Partities maken opnieuw draaien goedkoop
Hier komen idempotentie en incrementeel laden samen. Als de data per dag is gepartitioneerd en een laadproces zijn partitie volledig bezit, is een dag opnieuw draaien triviaal veilig: vervang de partitie. Geen merge-logica, geen sleutels matchen, geen dubbelzinnigheid.
Dat is vaak het eenvoudigste correcte ontwerp, en het is de moeite waard om daar eerst naar te grijpen, vóór iets slimmers. Het werkt niet meer als records achteraf tussen partities verschuiven, zoals een late correctie op een oude order, en precies dan heb je de merge wel nodig.
De operationele opbrengst
Als opnieuw draaien veilig is, wordt de herstelprocedure voor bijna alles hetzelfde: draai het opnieuw. Backfills zijn niet langer bijzonder. Een mislukte job om 3 uur 's nachts kan tot de ochtend wachten. Een nerveuze beheerder die twee keer klikt, is geen incident.
Daarom is het de moeite waard om er vroeg ontwerptijd in te steken. Niet omdat het elegant is, maar omdat het een hele categorie problemen van 3 uur 's nachts verandert in een categorie gewone problemen.
- Pipelines
- Architectuur
- Betrouwbaarheid