Integrità dei dati
1) Cos'è l'integrità dei dati
L'integrità dei dati è un insieme di proprietà e controlli che garantiscono che i dati siano corretti, coerenti e coerenti in tutto il ciclo di vita, dalle origini e trasformazioni alle vetrine, API ed esportazioni. L'obiettivo è che la stessa affermazione dia la stessa risposta durante la ripetizione e che le modifiche siano tracciabili e verificabili.
2) Tipi di integrità e dove vivono
Entità (Entity) - Chiavi primarie univoche, nessuna duplicazione.
Riferimento (Referential) - Collegamenti FK corretti; l'assenza di riferimenti «sospesi».
Dominio (Domain) - Intervalli e formati validi (tipo, lunghezza, riferimenti).
Regole aziendali: invarianti dell'area oggetto (saldo ≥ 0, importo cablaggio = 0, ecc.).
Temporanea: monotonia e coerenza delle etichette temporali, zone temporali corrette.
Criteri di accesso: RLS/CLS non compromette la coerenza logica dei dati visibili.
3) Contratti dati e schemi (fonte verità)
Impostare i contratti formali per set ed eventi; Li applichiamo all'ingresso e dopo ogni trasformazione.
Esempio (YAML, semplificato):yaml dataset: payments primary_key: txn_id foreign_keys:
- fk: user_id -> users.user_id schema:
- {name: txn_id, type: string, unique: true}
- {name: user_id, type: string, not_null: true}
- {name: amount, type: decimal(18,2), min: 0}
- {name: currency, type: string, in: [USD,EUR,TRY,UAH]}
- {name: event_time, type: timestamp, tz: UTC}
dq_rules:
- "duplicates(txn_id)=0"
- "ref_integrity(user_id, users.user_id)=true"
- "sum(amount) >= 0"
evolution:
semver: [MAJOR, MINOR, PATCH]
breaking_changes_require: approval:data-governance
4) Garanzie transazionali e isolamento
ACID per OLTP: atomatologia, consistenza, isolamento, durata.
Livelli di isolamento: Read Committed/Repeatable Read/Serializable - Seleziona il rischio di letture sporche/uniche/fantasma.
OLAP e lakehouse: committenti di tabelle atomiche, idempotent sink e schema-evolution con controllo di compatibilità.
Coerenza delle formule KPI: il livello semantico è una verità per report e API.
5) Sistemi distribuiti: ordine, ripetizioni, idipotenza
Ordine eventi: usiamo «event _ time» + «ingested _ at», watermarks e tolleranza lateness; aggregazioni basate su event time.
Ricarica (at-least-once): globale «event _ id», tabelle idempotency keys, upsert/merge su chiave sostenibile.
Out-of-order - Ridimensionamento delle finestre, strategia di ritardo, compensazione.
Exactly-once: il trasporto può essere at-least-once, il ricevitore è idipotente.
6) Convalida integrità (DQ) su ogni livello
Includere le regole di integrità in CI/CD e nel RATE delle pipeline:- Freshness/Completeness/Uniqueness/Valid Values/Referential Integrity.
- Anomalie: picchi di duplicati, interruzioni di tempo, bruschi spostamenti di distribuzione.
- Controllo delle formule KPI: versionalità dei calcoli e test di corrispondenza dei risultati.
- Controllo esportazione - Impedisce l'emissione di set con violazioni (quarantine).
yaml expect_column_values_to_be_unique: {column: txn_id}
expect_column_values_to_not_be_null: {column: user_id}
expect_column_values_to_be_in_set: {column: currency, value_set: [USD,EUR,TRY,UAH]}
7) Integrità finanziaria e operativa
Doppio-entry: debito/credito in saldo; compressioni di riepilogo in cut-off.
Invarianti totali: importo dei pagamenti = importo dei prelievi + commissione + correzioni.
Invarianti operativi: le metriche SLA/guardrail non compromettono le regole aziendali (ad esempio, le riparazioni automatiche non duplicano).
8) Lineedge, controllo e riproduzione
Linage: dalla fonte alle vetrine/fich; visibilità delle trasformazioni e dei proprietari.
Trailer di controllo: chi ha cambiato cosa, quando e perché; versioni di diagrammi/formule/jobs.
Snappshot/checkpoint: possibilità di contare e confermare i rapporti precedenti.
Ripro - La stessa richiesta di taglio → lo stesso risultato (versioni e livelli).
9) Sicurezza e privacy senza perdita di integrità
RLS/CLS - I filtri delle righe/colonne non possono violare gli invarianti (ad esempio, la somma del campione visibile deve corrispondere a quella dichiarata).
Maschera/Torning - Strategie definite per mantenere il deadup e l'integrità referenziale.
Crittografia nel canale e su disco dopo la compressione gestione delle chiavi e controllo delle disponibilità.
DSAR/Retention - L'eliminazione/anonimizzazione non rompe la connettività (criterio a cascata).
10) Autosufficienza e riparazione automatica
Quarantine - isolamento di partizioni/battelli sospetti; I consumatori sono un ramo pulito.
Replay/Backfill: ridisegna la finestra dal registro raw invariato.
Assemblaggio dei livelli e dei sistemi (raw↔curated↔marts; istochnik↔DWH).
Depup/Compettion/Rebuild - Procedure di riparazione di sistema per indici/aggregazioni.
Policy-as-code: "Che tipo di anomalia può determinare l'effetto della soglia di
11) Procedure di modellazione e conservazione
Chiavi stabili: PK surrogato (UUID/ULID), chiavi naturali immutabili nelle guide.
Normalizatsiya↔denormalizatsiya: comunicazioni FK all'origine, vetrine denormalizzate con controllo della versione logica.
SCD1/SCD2 - Cronologia guidata per le misurazioni.
Ordinamento/clustering: migliora RLE/zone-maps e semplifica la compressione.
Hash e checksum: verifica l'integrità dei file/partiture.
12) Integrità nel tempo e nei rapporti
Versioni delle formule: il report di gennaio 2025 deve essere riprodotto dalla versione X.
Cut-off e Chiusura periodo - Congelamento delle vetrine e dei tagli di archiviazione.
Late arriving facts - Meccanica dosaggio e calcolo con il segno della versione del report.
Documentazione delle ridefinizioni: regolazioni manuali solo con l'udienza.
13) Integrazione e API
Contratto API: schemi, tipi, campi obbligatori, codici di errore; versioning (v1/v2).
Convalida in ingresso: reject cattivo payload, non riparare in silenzio.
Idempotent POST: chiave di idempotenza, ripetizione sicura.
Esporta in file: coerenza delle partiture, hash, firme.
14) Antipattern
SELECT nelle query e nelle query - si rompe durante l'evoluzione MINOR.
FK a parole: nessuna verifica effettiva dei collegamenti.
Correzioni silenziose dei dati senza controllo o report.
Mescolare TZ e formati di tempo in un unico set.
Ridefinire KPI con maniglie senza versione o registro.
Unica chiave di deduplicazione senza strategie di ricambio.
Rimozione DSAR senza controllo a cascata.
15) Road map di implementazione
1. Inventory & criticità: mappa dei set/eventi, proprietari, rischi, invarianti.
2. Contratti e schemi: formalizza i tipi/vincoli/FK, controlli di compatibilità CI.
3. DQ in pipline: Freshness/Completeness/Uniqueness/RI, quarantine, alert.
4. Base transazionale: atomic-sink, upsert/merge, cronologia SCD, versionalità delle formule.
5. Lineedge e controllo: directory, traccia, change-logs, access-logs.
6. Criteri di riparazione: replay/backfill/dedup/recordcile come codice; runbook’и и SLO MTTR-data.
7. Protezione/rap: RLS/CLS, occultamento, crittografia, processi DSAR.
8. Report: cut-off, tagli freeze, gestione delle versioni KPI.
16) Foglio di assegno prima del lancio del set/vetrina
- PK/FK e vincoli di dominio impostati e sottoposti a test.
- Versioning di diagrammi/formule abilitato schema-differf verde.
- Regole DQ (freschezza/completezza/unicità/intervalli/RI) verdi.
- Voci Idempotent: upsert/merge, chiave di idempotenza (per eventi).
- Tempo: 'event _ time'e'ingested _ at', TZ = UTC; criterio late data.
- Lineage e controllo sono visibili; quarantine e alert inclusi.
- RLS/CLS/occultamento non violano invarianti o RI.
- DSAR/Retention testati; cut-off/archivio è pronto.
17) Mini modelli
SQL - Verifica integrità riferimento
sql select count() as orphans from fact_payments f left join dim_users u on f.user_id = u.user_id where u.user_id is null;
-- ожидаем orphans = 0
Criterio quarantine/repair (pseudo-YAML)
yaml policy: payments_integrity detect:
- rule: duplicates(txn_id) > 0
- rule: ref_integrity(user_id, users.user_id) = false auto_actions:
- quarantine_partition: {date: today}
- trigger_replay: {window: "last_2h"}
escalate_if:
- condition: violations_persist>30m page: "oncall-data"
Schema SCD2 per la misurazione
sql
-- dim_user_status (SCD2)
user_id, status, valid_from, valid_to, is_current
18) Totale
L'integrità dei dati non è una sola verifica, ma un sistema di garanzia completo: contratti e vincoli formali, invarianti transazionali e distribuiti, convalida e automatizzazione delle riparazioni, lineage e verifiche, privacy e diritti. Quando questi elementi lavorano insieme, i dati diventano una base affidabile per le soluzioni e gli incidenti sono rari, brevi e prevedibili.