SQL Dojo Bêta
Technique

Table de quarantaine

Les mauvaises lignes vont dans une table à part avec la règle qu'elles enfreignent, au lieu d'être filtrées et oubliées.

Calculez une reason par ligne avec un seul CASE dont les WHEN suivent l'ordre des règles. Les lignes sans raison vont dans la table de staging, les autres dans la table de quarantaine. Testez que propres + en quarantaine = brutes, et suivez la quarantaine par raison et par jour : c'est la qualité des données de la source, en un chiffre sur lequel ses responsables peuvent agir.

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
L’essayer en Randori