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_id | reason |
|---|---|
| 1 | NULL |
| 2 | missing email |
| 3 | invalid email |
| 4 | unknown country |
Pratiquer :Mettre en quarantaine, pas jeter