Domain Knowledge Base - Data Engineering
Come funziona il dominio, prima di scrivere una riga di codice? Scegli un documento dall'albero a sinistra: ogni pagina spiega una parte del modello.
Regole di Business - Data Engineering
Questo documento elenca le regole di business fondamentali del dominio Data Engineering, identificate con codice univoco BR-NNN. Ogni regola è technology-independent e descrive un vincolo invariante sul comportamento di una piattaforma dati.
---
BR-001 - Idempotenza delle esecuzioni di pipeline
Codice: BR-001
Nome: Ogni esecuzione di una PipelineDati deve essere idempotente
Descrizione: Rieseguire la stessa pipeline sullo stesso intervallo di partizione (es. la stessa data logica) deve produrre lo stesso Dataset di output, senza duplicati né effetti collaterali cumulativi. Le scritture devono usare pattern overwrite-partition, merge/upsert su chiave, o insert-if-not-exists, mai append cieco.
Motivazione: Permettere retry sicuri dopo guasti transienti e backfill ripetibili senza corrompere i dati.
Priorità: CRITICA
Attori: Data Engineer, Scheduler
Violazione: duplicazione di righe nel Dataset; il QualityCheck di unicità fallisce e blocca la pubblicazione.
Tracciabilità: glossary Idempotenza, Scrittura Idempotente, Backfill; Apache Airflow idempotency guidelines.
---
BR-002 - Validazione di qualità prima della pubblicazione
Codice: BR-002
Nome: Nessun Dataset passa allo stato published senza superare i QualityCheck bloccanti
Descrizione: Prima di promuovere un dataset a published, la pipeline deve eseguire i controlli di qualità definiti (non-null sulle colonne chiave, unicità della chiave primaria logica, freshness entro SLA, range/dominio dei valori, conteggio righe entro soglie attese). I controlli marcati blocking arrestano la promozione; quelli warning la consentono ma emettono un alert.
Motivazione: Impedire che dati corrotti o incompleti raggiungano i consumatori a valle.
Priorità: ALTA
Attori: Data Steward, Data Engineer
Violazione: evento DataQualityFallita; il Dataset resta in validated e non transita a curated/published.
Tracciabilità: glossary Data Quality, Great Expectations; BR-001.
---
BR-003 - Compatibilità di schema verso l'indietro
Codice: BR-003
Nome: Un'evoluzione di schema non può introdurre cambiamenti breaking senza versionamento
Descrizione: L'aggiunta di una colonna opzionale o la promozione di tipo compatibile (int → long) è permessa in-place. La rimozione di una colonna, la ridenominazione, il cambio di tipo non compatibile o l'irrigidimento di un vincolo sono cambiamenti breaking: richiedono una nuova versione del Dataset (o una SchemaEvolution esplicita con periodo di coesistenza) per non rompere i consumatori esistenti.
Motivazione: Proteggere job e query a valle da rotture silenziose del contratto dati.
Priorità: ALTA
Attori: Data Engineer, Data Consumer
Violazione: evento SchemaBreakingChange; deploy del nuovo schema bloccato dallo Schema Registry in modalità BACKWARD.
Tracciabilità: glossary Schema Evolution, Schema Registry, Apache Avro; Confluent Schema Registry compatibility modes.
---
BR-004 - SLA di freshness per ogni dataset pubblicato
Codice: BR-004
Nome: Ogni Dataset in stato published dichiara e rispetta un SLA di freshness
Descrizione: Ogni dataset esposto ai consumatori deve avere un SLA esplicito (es. "aggiornato entro le 06:00 UTC con dati fino a T-1"). Il sistema monitora il timestamp dell'ultima partizione valida; se supera la soglia di tolleranza, lo SLA è violato e i consumatori devono essere avvisati.
Motivazione: Garantire ai consumatori aspettative affidabili sull'attualità dei dati.
Priorità: ALTA
Attori: Data Engineer, Data Consumer, Scheduler
Violazione: eventi SLAViolato e DataFreshnessDegradata; alert al team owner.
Tracciabilità: glossary SLA, Data Freshness, Partitioning; BR-002.
---
BR-005 - Lineage tracciabile end-to-end
Codice: BR-005
Nome: Ogni Dataset registra il proprio DataLineage a monte e a valle
Descrizione: Per ogni dataset prodotto deve essere registrata la lista delle sorgenti di input (upstream) e delle trasformazioni applicate, in modo che sia ricostruibile l'origine di ogni colonna. La rimozione o modifica di una sorgente deve propagare un aggiornamento di lineage ai dataset derivati.
Motivazione: Abilitare impact analysis, debugging, compliance (GDPR data provenance) e fiducia nei dati.
Priorità: ALTA
Attori: Data Steward, Data Engineer
Violazione: lineage incompleto → impossibile valutare l'impatto di un SchemaBreakingChange.
Tracciabilità: glossary Data Lineage, Data Catalog; OpenLineage spec; Regolamento UE 2016/679 (GDPR) art. 30.
---
BR-006 - Minimizzazione e classificazione dei dati personali
Codice: BR-006
Nome: I dati personali devono essere classificati, minimizzati e mascherati nelle zone non-protette
Descrizione: Ogni colonna che contiene dati personali (PII) deve essere etichettata nel DataCatalog. Nelle zone di consumo generale (es. dataset published per analisi self-service) i campi sensibili devono essere mascherati, pseudonimizzati o esclusi, salvo che il consumatore abbia un legittimo accesso autorizzato.
Motivazione: Conformità GDPR (minimizzazione, limitazione delle finalità) e riduzione del rischio di data breach.
Priorità: CRITICA
Attori: Data Steward, Data Consumer
Violazione: PII esposta in chiaro a consumatori non autorizzati → incidente di compliance.
Tracciabilità: glossary Data Governance, Data Catalog; Regolamento UE 2016/679 art. 5, art. 25.
---
BR-007 - Separazione delle zone (raw / curated / published)
Codice: BR-007
Nome: I dati transitano attraverso zone con responsabilità distinte e non saltano stadi
Descrizione: L'architettura adotta zone di maturità progressiva: raw (ingest fedele alla sorgente, immutabile), validated/curated (puliti, conformi, tipizzati) e published (modellati per il consumo, documentati). Un consumatore di analytics non legge mai direttamente la zona raw; ogni promozione tra zone è esplicita e tracciata.
Motivazione: Isolare i guasti, garantire riproducibilità (la zona raw permette il re-processing) e disaccoppiare ingest da consumo.
Priorità: ALTA
Attori: Data Engineer, Data Consumer
Violazione: consumo diretto della zona raw → dipendenza fragile da formati grezzi non garantiti.
Tracciabilità: glossary Data Lake, Data Lakehouse, Medallion Architecture; state-machine dataset-lifecycle.md.
---
BR-008 - Costo e partizionamento sotto controllo
Codice: BR-008
Nome: Le tabelle di grandi dimensioni devono essere partizionate e le query devono usare il partition pruning
Descrizione: I dataset che superano una soglia di volume devono essere partizionati su una chiave selettiva (tipicamente temporale). Le query di lettura devono filtrare sulla colonna di partizione per abilitare il pruning ed evitare full scan costosi. Lo storage colonnare (Parquet/ORC) è obbligatorio per i dataset analitici.
Motivazione: Controllare costi di calcolo/storage e latenza delle query analitiche.
Priorità: MEDIA
Attori: Data Engineer, Data Consumer
Violazione: full table scan ricorrenti → costi e tempi di query fuori budget.
Tracciabilità: glossary Partitioning, Storage Colonnare, Apache Parquet; evento PartitionCreated.