Cómo crear una tabla de validación de datos en Data Warehouse
Vamos a crear una tabla de validación de datos en Data Warehouse para registrar reglas violadas durante las cargas ETL/ELT. Esto es útil para rastrear errores, facilitar correcciones y mejorar la calidad de los datos con el tiempo.
Requisitos previos
- Entorno de Data Warehouse (p. ej.: SQL Server, Azure Synapse, Amazon Redshift) con permisos para crear tablas.
- Pipeline ETL/ELT sencillo (p. ej.: Azure Data Factory, SSIS, dbt) para invocar las validaciones.
- Conocimientos básicos de SQL y del esquema de las tablas de origen y destino.
Paso 1: Definir el propósito y las reglas de validación
Antes de crear la tabla, defina qué tipos de validaciones quiere registrar. Ejemplos comunes: valores nulos indebidos, tipos inválidos, rangos fuera de lo esperado, claves duplicadas y referencias a dimensiones inexistentes. Elija campos importantes para diagnosticar el error (p. ej.: source_system, table_name, row_key, column_name, error_code, error_message).
Paso 2: Crear la estructura de la tabla de validación
Creé una tabla central para almacenar eventos de validación. La tabla debe ser compacta pero informativa: incluya timestamps, identificadores de fila del origen y contexto de la carga (batch_id o run_id).
CREATE TABLE validation_errors (
validation_id BIGINT IDENTITY(1,1) PRIMARY KEY,
run_id VARCHAR(100) NOT NULL,
source_system VARCHAR(100),
table_name VARCHAR(100),
row_key VARCHAR(500),
column_name VARCHAR(100),
error_code VARCHAR(50),
error_message VARCHAR(1000),
detected_at DATETIME2 DEFAULT SYSUTCDATETIME(),
severity VARCHAR(20) DEFAULT 'warning'
);
Adapte tipos y longitudes según su Data Warehouse. En entornos columnar (p. ej.: Redshift, Synapse dedicated SQL pool) puede ajustar tipos para compresión.
Paso 3: Implementar validaciones en el pipeline ETL/ELT
Implemente las reglas en la etapa de transformación. En ETL tradicional (SSIS) o en ELT (SQL después de la carga), use consultas que identifiquen filas inválidas y hagan un INSERT en la tabla de validación en lugar de bloquear toda la carga.
-- Exemplo SQL para detectar nulos indevidos e inserir na tabela de validação
DECLARE @run_id VARCHAR(100) = 'run_20261104_01';
INSERT INTO validation_errors (run_id, source_system, table_name, row_key, column_name, error_code, error_message, severity)
SELECT
@run_id,
'syst_x',
'stg_clientes',
CAST(id AS VARCHAR(500)),
'email',
'NULL_EMAIL',
'Email não pode ser nulo',
'error'
FROM stg_clientes
WHERE email IS NULL;
Para validaciones de integridad referencial, haga LEFT JOINs y registre filas sin correspondencia:
-- Exemplo: FK para dimensão de país
INSERT INTO validation_errors (run_id, source_system, table_name, row_key, column_name, error_code, error_message)
SELECT
@run_id, 'syst_x', 'stg_clientes', CAST(c.id AS VARCHAR(500)), 'country_code', 'FK_MISSING_COUNTRY', 'Código de país não existe na dimensão'
FROM stg_clientes c
LEFT JOIN dim_country d ON c.country_code = d.country_code
WHERE c.country_code IS NOT NULL AND d.country_code IS NULL;
Paso 4: Clasificar y gestionar los errores
Use el campo severity para distinguir 'error' (impide la carga de destino) y 'warning' (se carga pero se registra). Puede automatizar alertas cuando existan errores críticos: enviar correo electrónico, crear un ticket o bloquear la promoción del dataset a producción.
-- Exemplo simples: contar erros críticos antes de proceder à carga final
IF EXISTS (SELECT 1 FROM validation_errors WHERE run_id = @run_id AND severity = 'error')
BEGIN
THROW 50001, 'Existem erros críticos. Parar processo de carga.', 1;
END
Paso 5: Enriquecer la tabla con métricas e historial
Incluya columnas adicionales si necesita análisis posterior: resolved_by, resolved_at, note. Cree vistas o informes en Power BI para monitorizar tendencias de errores por run, por tabla o por tipo de error.
ALTER TABLE validation_errors
ADD resolved_by VARCHAR(100), resolved_at DATETIME2, note VARCHAR(2000);
Verificar el resultado
Para confirmar, ejecute consultas de verificación: cuente errores por run_id, vea ejemplos de filas reportadas y pruebe escenarios que generen errores conocidos. Ejemplos:
-- Contagem por severidade
SELECT severity, COUNT(*) as cnt FROM validation_errors WHERE run_id = 'run_20261104_01' GROUP BY severity;
-- Exemplos de erros
SELECT TOP 20 * FROM validation_errors WHERE run_id = 'run_20261104_01' ORDER BY detected_at DESC;
Conclusión
Una tabla de validación de datos en Data Warehouse permite monitorizar y resolver problemas de calidad sin interrumpir todo el pipeline. Próximos pasos: automatizar alertas, crear dashboards en Power BI y añadir rutinas de corrección automática para errores recurrentes. Consejo: empiece con pocas reglas esenciales e vaya ampliando según aprenda qué errores impactan más.