Blog · 6 agosto 2026
L'idempotenza è la maggior parte del lavoro
Ogni pipeline viene rieseguita. Dopo un errore, dopo una correzione, dopo che qualcuno ha premuto il pulsante due volte. Se sarà routine o un incidente si decide in fase di progettazione.
2 min di lettura
Una pipeline verrà rieseguita. Non forse: di sicuro. La rete cade a metà, qualcuno corregge un bug e ricarica una settimana, un operatore non è sicuro che il job sia finito e lo rilancia.
L'unica vera domanda è che cosa succede la seconda volta. Se rieseguire è sicuro e noioso, la maggior parte dei problemi operativi diventa piccola. Se non lo è, ogni errore si trasforma in un'indagine sullo stato in cui si trovano i dati.
L'append è la trappola
Il caricamento più semplice è un insert, e gli insert non sono idempotenti. Esegui due volte il file di ieri e ieri esiste due volte. Nessun errore. Il numero di righe sembra plausibile. Il fatturato di un giorno raddoppia in silenzio, e lo scopre settimane dopo qualcuno che si ricorda che quel martedì non era andato così bene.
La soluzione è far sì che il caricamento punti a uno stato anziché a un evento: questa chiave deve finire con questi valori. Che si tratti di un merge, di un upsert o di un delete-then-insert su una partizione delimitata conta meno della proprietà: eseguirlo due volte lascia lo stesso risultato che eseguirlo una.
Serve una chiave che significhi qualcosa
Il merge richiede di sapere che cosa rende una riga la stessa riga. Un id surrogato generato al caricamento non può farlo: per definizione è diverso a ogni esecuzione.
Serve quindi una chiave di business: un numero d'ordine, un riferimento di transazione, una combinazione di sistema sorgente e id sorgente. Se la sorgente non ha davvero una chiave stabile, vale la pena farlo emergere presto, perché ogni strategia di deduplicazione a valle sarà un tirare a indovinare costruito sopra.
Se non sai dire che cosa rende due righe la stessa riga, non puoi rendere il caricamento ripetibile. Tutto il resto è speranza.
Le partizioni rendono economiche le riesecuzioni
Qui idempotenza e caricamento incrementale si incontrano. Se i dati sono partizionati per giorno e un caricamento possiede interamente la sua partizione, rieseguire un giorno è banalmente sicuro: si sostituisce la partizione. Niente logica di merge, niente corrispondenza di chiavi, nessuna ambiguità.
Spesso è il progetto corretto più semplice, e vale la pena sceglierlo prima di qualcosa di più ingegnoso. Smette di funzionare quando i record si spostano tra partizioni a posteriori, come una correzione tardiva a un vecchio ordine: ed è proprio allora che il merge serve davvero.
Il ritorno operativo
Quando rieseguire è sicuro, la procedura di ripristino per quasi tutto diventa la stessa: rieseguire. I backfill smettono di essere speciali. Un job fallito alle 3 di notte può aspettare la mattina. Un operatore nervoso che clicca due volte non è un incidente.
Per questo vale la pena dedicarci tempo di progettazione fin dall'inizio. Non perché sia elegante, ma perché trasforma un'intera categoria di problemi delle 3 di notte in una categoria di problemi ordinari.
- Pipeline
- Architettura
- Affidabilità
Lo vorresti per la tua attività?
Dicci cosa richiede troppo tempo o cosa vorresti migliorare.