Tecnica
Tabella di quarantena
Le righe errate vanno in una tabella separata con la regola che violano, invece di essere filtrate e dimenticate.
Calcola un reason per riga con un solo CASE i cui WHEN seguono l'ordine delle regole. Le righe senza motivo vanno
nella tabella di staging, le altre nella tabella di quarantena. Verifica che pulite + in quarantena = grezze, e segui la
quarantena per motivo e per giorno: è la qualità dei dati della sorgente, in un numero su cui i suoi responsabili
possono agire.
WITH raw_signups(signup_id, email, country) AS (VALUES
(1, 'lea@example.com', 'FR'), (2, NULL, 'FR'),
(3, 'tom.example.com', 'BE'), (4, 'mia@example.com', 'CH'))
SELECT signup_id,
CASE WHEN email IS NULL THEN 'missing email'
WHEN email NOT LIKE '%@%' THEN 'invalid email'
WHEN country NOT IN ('FR', 'BE', 'DE') THEN 'unknown country'
END AS reason
FROM raw_signups
ORDER BY signup_id;
| signup_id | reason |
|---|---|
| 1 | NULL |
| 2 | missing email |
| 3 | invalid email |
| 4 | unknown country |
Esercitati:Quarantine, don't drop