Ga naar inhoud

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

← Alle artikelen

Ook voor jouw bedrijf?

Vertel wat te veel tijd kost of wat je wilt verbeteren.