Cómo validar row counts en ELT: paso a paso
Validar row counts en ELT es una tarea simple pero crucial para garantizar que las cargas están completas e idempotentes. Este tutorial muestra cómo comparar contadores entre origen y destino, detectar pérdidas o duplicados y automatizar checks con SQL y tablas de control.
Prerrequisitos
- Acceso a un origen de datos (p. ej.: base de datos SQL, CSV) y a un destino (p. ej.: Delta, tablas en un Data Warehouse).
- Permisos para leer en el origen y escribir/consultar en el destino.
- Conocimientos básicos de SQL y de creación de pipelines ELT.
Paso 1: Entender el objetivo del check de row counts
El objetivo es verificar que el número de registros cargados en el destino corresponde al número esperado desde el origen para una ventana temporal o para la tabla completa. Esto ayuda a detectar fallos de ingestión, particiones faltantes o duplicados introducidos por el proceso ELT.
Paso 2: Definir la granularidad del check
Elija si el check será por carga completa, por partición (p. ej.: fecha), o por lote (p. ej.: hora). Para cargas incrementales, use una columna de watermark (p. ej.: last_modified) o la columna de fecha. La granularidad determina las consultas SQL que va a usar.
Paso 3: Crear la query de conteo en el origen
Escriba una query simple en el origen que devuelva el conteo por la dimensión elegida. Ejemplo usando SQL para conteo por fecha de evento:
SELECT event_date, COUNT(*) AS src_count
FROM events_source
WHERE event_date BETWEEN '2026-10-20' AND '2026-10-21'
GROUP BY event_date;
Paso 4: Crear la query de conteo en el destino
En la tabla destino (por ejemplo una tabla Delta o una tabla en Data Warehouse), ejecute la misma agregación. Debe usar las mismas reglas de filtro y transformación aplicadas en el ELT.
SELECT event_date, COUNT(*) AS dst_count
FROM events_dest
WHERE event_date BETWEEN '2026-10-20' AND '2026-10-21'
GROUP BY event_date;
Paso 5: Comparar los resultados y calcular el delta
Combine las dos queries para obtener una tabla de comparación con delta y porcentaje. Esto facilita detectar discrepancias por partición.
WITH src AS (
SELECT event_date, COUNT(*) AS src_count
FROM events_source
WHERE event_date BETWEEN '2026-10-20' AND '2026-10-21'
GROUP BY event_date
),
dst AS (
SELECT event_date, COUNT(*) AS dst_count
FROM events_dest
WHERE event_date BETWEEN '2026-10-20' AND '2026-10-21'
GROUP BY event_date
)
SELECT
COALESCE(src.event_date, dst.event_date) AS event_date,
COALESCE(src.src_count, 0) AS src_count,
COALESCE(dst.dst_count, 0) AS dst_count,
COALESCE(dst.dst_count, 0) - COALESCE(src.src_count, 0) AS diff,
CASE WHEN COALESCE(src.src_count,0) = 0 THEN NULL
ELSE ROUND((COALESCE(dst.dst_count,0) - COALESCE(src.src_count,0)) * 100.0 / src.src_count,2)
END AS pct_diff
FROM src
FULL OUTER JOIN dst USING (event_date);
Paso 6: Automatizar el check en el pipeline ELT
Añada un paso en el pipeline ELT que ejecute la query de comparación y produzca un resultado guardado en una tabla de auditoría. En caso de diferencia por encima de un umbral (p. ej.: 1%), marque el job como fallido o envíe una alerta.
-- Exemplo pseudo-SQL para inserir resultado de auditoria
INSERT INTO audit_row_counts (event_date, src_count, dst_count, diff, pct_diff, check_time)
SELECT event_date, src_count, dst_count, diff, pct_diff, CURRENT_TIMESTAMP
FROM comparison_query
WHERE COALESCE(pct_diff,0) > 1.0 OR COALESCE(diff,0) < 0;
Paso 7: Tratar errores comunes
Errores frecuentes incluyen diferencias por filtros divergentes, zonas horarias inconsistentes, transformaciones aplicadas de forma desigual, o cargas reordenadas que causan duplicados. Verifique las transformaciones en el ELT, las conversiones de timestamp y si la desduplicación se aplica antes del conteo.
Verificar el resultado
Confirme que la tabla audit_row_counts tiene registros para la ventana probada y que los campos diff/pct_diff están dentro del umbral aceptable. Para pruebas, fuerce una discrepancia (p. ej.: cargar manualmente un registro) y confirme que se genera la alerta.
Conclusión
Validar row counts en ELT ayuda a detectar pérdidas, duplicados y errores de transformación antes de que lleguen a los informes. Próximos pasos: añadir checks de sums (valores agregados) y checks de clave única para una cobertura más completa. Consejo: empiece con checks simples por partición y aumente la complejidad conforme gane confianza.