(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo crear una tabla de auditoría de cargas en Data Warehouse

João Barros 14 de September de 2026 4 min de lectura

Este tutorial explica cómo crear una tabla de auditoría de cargas en Data Warehouse para registrar ejecuciones ETL, conteos de filas, duraciones y errores —útil para rastrear historial de cargas, diagnosticar fallos y garantizar la calidad de los datos.

Requisitos previos

  • Conocimientos básicos de SQL (SELECT, INSERT, UPDATE).
  • Entorno de Data Warehouse con soporte SQL (p. ej.: SQL Server, PostgreSQL, Azure Synapse).
  • Permisos para crear tablas y ejecutar jobs/ETL.

Paso 1: Definir el propósito y columnas de la tabla de auditoría

Decidir qué información es necesaria: identificador de la carga, origen, destino, timestamps, conteos, estado y mensaje de error. Esto ayuda a responder "cuándo" y "por qué" una carga falló.

-- Exemplo de colunas essenciais para auditoria de cargas
-- job_id: identificador da execução
-- process_name: nome do processo ETL
-- source_system: origem dos dados
-- target_table: tabela destino
-- start_time / end_time: tempos
-- rows_loaded: número de linhas carregadas
-- status: SUCCESS / FAILED
-- message: detalhes do erro

Paso 2: Crear la tabla de auditoría

Crear la tabla en un esquema apropiado (p. ej.: dbo, staging). El ejemplo SQL siguiente es compatible con la mayoría de sistemas SQL; ajusta tipos si es necesario.

CREATE TABLE dbo.etl_audit (
  audit_id BIGINT IDENTITY(1,1) PRIMARY KEY,
  job_id NVARCHAR(100) NOT NULL,
  process_name NVARCHAR(200) NOT NULL,
  source_system NVARCHAR(100),
  target_table NVARCHAR(200),
  start_time DATETIME2 NOT NULL,
  end_time DATETIME2 NULL,
  rows_expected BIGINT NULL,
  rows_loaded BIGINT NULL,
  status NVARCHAR(20) NOT NULL,
  message NVARCHAR(MAX) NULL,
  created_at DATETIME2 DEFAULT SYSUTCDATETIME()
);

Paso 3: Instrumentar el proceso ETL para registrar inicio y fin

Añadir inserts/updates al inicio y al final del job ETL. Al inicio se inserta una fila con el estado 'RUNNING'; al final se actualiza a 'SUCCESS' o 'FAILED' con conteos y mensaje.

-- Inserir a execução ao iniciar
DECLARE @job_id NVARCHAR(100) = 'job_20260914_01';
DECLARE @process NVARCHAR(200) = 'Carga_Clientes';
DECLARE @start DATETIME2 = SYSUTCDATETIME();

INSERT INTO dbo.etl_audit (job_id, process_name, source_system, target_table, start_time, status)
VALUES (@job_id, @process, 'CRM', 'dw.dim_customers', @start, 'RUNNING');

-- Após a carga (exemplo de sucesso): actualizar com contagens e estado
DECLARE @end DATETIME2 = SYSUTCDATETIME();
DECLARE @rows BIGINT = 1250;

UPDATE dbo.etl_audit
SET end_time = @end,
    rows_loaded = @rows,
    status = 'SUCCESS',
    message = NULL
WHERE job_id = @job_id AND status = 'RUNNING';

-- Em caso de erro, registar falha
UPDATE dbo.etl_audit
SET end_time = SYSUTCDATETIME(),
    status = 'FAILED',
    message = 'Erro: ligação ao source falhou.'
WHERE job_id = @job_id AND status = 'RUNNING';

Paso 4: Registrar validaciones y discrepancias (conteos esperados)

Si el ETL tiene expectativas (por ejemplo, archivo con cabecera que indica filas), registrar rows_expected y comparar. Esta práctica ayuda a identificar cargas incompletas o duplicadas.

-- Exemplo de comparação simples durante o ETL
DECLARE @expected BIGINT = 1300;
DECLARE @loaded BIGINT = 1250;

IF @loaded < @expected
BEGIN
  UPDATE dbo.etl_audit
  SET rows_expected = @expected,
      rows_loaded = @loaded,
      status = 'FAILED',
      message = 'Contagem menor que a esperada'
  WHERE job_id = @job_id;
END
ELSE
BEGIN
  UPDATE dbo.etl_audit
  SET rows_expected = @expected,
      rows_loaded = @loaded,
      status = 'SUCCESS'
  WHERE job_id = @job_id;
END

Paso 5: Consultas útiles y alertas

Crear queries para monitorizar cargas recientes, fallos y tiempos largos. Estas consultas alimentan dashboards o alertas por e-mail/Teams.

-- Cargas falhadas nas últimas 24 horas
SELECT *
FROM dbo.etl_audit
WHERE status = 'FAILED' AND start_time > DATEADD(day,-1,SYSUTCDATETIME())
ORDER BY start_time DESC;

-- Duração média por processo
SELECT process_name, AVG(DATEDIFF(second,start_time,end_time)) AS avg_seconds
FROM dbo.etl_audit
WHERE status = 'SUCCESS' AND end_time IS NOT NULL
GROUP BY process_name;

Verificar el resultado

Verifica que las filas de auditoría aparecen al iniciar y actualizar el job. Prueba casos de éxito y de fallo: las entradas deben cambiar de 'RUNNING' a 'SUCCESS' o 'FAILED' e incluir conteos y mensajes. Usa las consultas anteriores para confirmar alertas y métricas.

Conclusión

Una tabla de auditoría de cargas simple permite rastrear ETL, diagnosticar errores y medir rendimiento. Próximos pasos: integrar con herramientas de monitorización, almacenar firmas de archivos y registrar hashes para detección de duplicados. Consejo: empieza pequeño y añade campos según las necesidades de investigación de fallos.