SQL Dojo Beta
Técnica

Tabla de cuarentena

Las filas erróneas van a una tabla aparte con la regla que incumplen, en lugar de filtrarse y olvidarse.

Calcule un reason por fila con un único CASE cuyos WHEN siguen el orden de las reglas. Las filas sin motivo van a la tabla de staging, las demás a la tabla de cuarentena. Compruebe que limpias + en cuarentena = brutas, y siga la cuarentena por motivo y por día: es la calidad de los datos de la fuente, como una cifra sobre la que sus responsables pueden actuar.

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
Probarlo en Randori