ACID-transacties
ACID-transacties zijn de vier garanties (Atomicity, Consistency, Isolation, Durability) die zorgen dat je data correct blijft, ook als een p...
Lees meerEen backfill is het opnieuw of alsnog verwerken van historische data door een pijplijn die normaal alleen nieuwe of gewijzigde data oppakt. Nodig als je een nieuwe pijplijn bouwt, een kolom toevoegt of een fout rechtzet. Lees hoe je het aanpakt en waarom je pijplijn daarvoor idempotent moet zijn.
Een backfill is het opnieuw of alsnog verwerken van historische data door een pijplijn die normaal alleen nieuwe of gewijzigde data oppakt. Je datapijplijn draait bijvoorbeeld elke nacht en pikt op wat er die dag is bijgekomen. Een backfill zet diezelfde pijplijn aan het werk op het verleden: alle facturen van de voorbije drie jaar, of net die ene week die verkeerd verwerkt raakte.
Vergelijk het met een boekhouding die je een tijd hebt laten liggen: je dagelijkse routine houdt alles bij vanaf vandaag, maar de overgeslagen maanden moet je nog apart inboeken.
Concreet voorbeeld: je bouwt een nieuw verkoopdashboard en de nachtelijke pijplijn laadt voortaan de bestellingen van gisteren. Op dag één staat er dus maar één dag data in je warehouse. Om drie jaar historiek te tonen, draai je de pijplijn eenmalig over de periode 2023 tot nu. Dat is de backfill.
Drie situaties komen het vaakst voor.
Een nieuwe pijplijn die het verleden moet inladen. Een verse pijplijn kent alleen de data vanaf het moment dat hij live ging. Voor cijfers over vorige jaren moet je die periode eerst laten instromen.
Een nieuwe kolom die je ook voor oude rijen wil invullen. Voeg je een berekende kolom toe, zoals marge per order, dan blijft die leeg voor alles wat er al stond. Een backfill vult ze alsnog. Bij dimensies met historiek raakt dit aan slowly changing dimensions: bepaal eerst welke versie van de waarde je voor het verleden wil bewaren.
Een fout die je hebt rechtgezet. Stel dat een verkeerde wisselkoers twee weken lang de omzet fout omrekende. Na de fix reken je die twee weken opnieuw door zodat de cijfers weer kloppen.
In de praktijk draai je dezelfde pijplijn opnieuw over een periode uit het verleden in plaats van over vandaag. Die periode knip je meestal in stukken (per dag, per maand, per partitie) die je een voor een of parallel verwerkt.
De gouden regel: zet de datum nooit vast op vandaag in je code, maar geef ze mee als parameter, zodat dezelfde logica voor elke historische dag werkt. Apache Airflow heeft daar een apart backfill-commando voor: je geeft een begin- en einddatum op en de scheduler werkt elke tussenliggende periode af. In dbt herbouw je een incrementeel model met een full refresh, of verwerk je een reeks periodes stuk per stuk met de microbatch-aanpak.
Een backfill overlapt bijna altijd met data die er al staat, en je moet hem soms halverwege herstarten. Daarom moet je pijplijn idempotent zijn: dezelfde run twee keer draaien levert exact hetzelfde resultaat op, zonder dubbele rijen.
Twee patronen zorgen daarvoor. Bij partition overwrite vervang je een hele partitie (een dag, een maand) in één keer, in plaats van rijen bij te voegen: draait de backfill twee keer over maart, dan wordt maart gewoon overschreven. Het tweede patroon is een MERGE op een unieke sleutel, zoals bij Change Data Capture: bestaande rijen worden bijgewerkt, nieuwe toegevoegd, en niets komt dubbel terecht.
Extra belasting op bron en warehouse
Een backfill over drie jaar leest in één keer veel meer data dan een gewone nachtelijke run. Dat kan je bronsysteem vertragen en je cloudkosten opdrijven. Plan zo'n zware run buiten de kantooruren.
Overlap met het normale schema
Draait je backfill terwijl de geplande run ook start, dan werken twee processen op dezelfde tabellen. Zonder idempotentie krijg je dubbele of half verwerkte data. Stem de timing af of leg de reguliere planning even stil tijdens een grote backfill.
ACID-transacties zijn de vier garanties (Atomicity, Consistency, Isolation, Durability) die zorgen dat je data correct blijft, ook als een p...
Lees meerApache Airflow is een open-source orkestrator: je beschrijft je datapijplijnen als code in Python, in de vorm van een DAG, en Airflow plant ...
Lees meerApache Hudi is een open tabelformaat dat een data lake op object storage transactioneel maakt. Het blinkt uit in snelle upserts, verwijderin...
Lees meerApache Kafka is een open-source platform dat stromen van events opslaat en doorgeeft: producenten schrijven berichten naar een topic, afneme...
Lees meerEen API of Application Programming Interface is de afgesproken manier waarop software met andere software praat. Je stuurt een verzoek in ee...
Lees meer