SQL Dojo Beta
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_idreason
1NULL
2missing email
3invalid email
4unknown country
Provalo in Randori