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

Como criar uma tabela de auditoria de cargas em Data Warehouse

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

Este tutorial explica como criar uma tabela de auditoria de cargas em Data Warehouse para registar execuções ETL, contagens de linhas, durações e erros — útil para rastrear histórico de cargas, diagnosticar falhas e garantir qualidade de dados.

Pré-requisitos

  • Conhecimentos básicos de SQL (SELECT, INSERT, UPDATE).
  • Ambiente de Data Warehouse com suporte a SQL (ex.: SQL Server, PostgreSQL, Azure Synapse).
  • Permissões para criar tabelas e executar jobs/ETL.

Passo 1: Definir o propósito e colunas da tabela de auditoria

Decidir que informação é necessária: identificador da carga, origem, destino, timestamps, contagens, estado e mensagem de erro. Isto ajuda a responder "quando" e "porquê" uma carga falhou.

-- 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

Passo 2: Criar a tabela de auditoria

Criar a tabela num esquema apropriado (ex.: dbo, staging). O exemplo SQL abaixo é compatível com a maioria dos sistemas SQL; ajusta tipos se necessário.

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()
);

Passo 3: Instrumentar o processo ETL para gravar início e fim

Adicionar inserts/updates no início e no fim do job ETL. No início insere-se uma linha com o estado 'RUNNING'; no fim actualiza-se para 'SUCCESS' ou 'FAILED' com contagens e mensagem.

-- 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';

Passo 4: Registar validações e discrepâncias (contagens esperadas)

Se o ETL tiver expectativas (por exemplo, ficheiro com cabeçalho que indica linhas), registar rows_expected e comparar. Esta prática ajuda a identificar cargas incompletas ou 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

Passo 5: Consultas úteis e alertas

Criar queries para monitorizar cargas recentes, falhas e tempos longos. Estas consultas alimentam dashboards ou 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 o resultado

Verifica que as linhas de auditoria aparecem ao iniciar e actualizar o job. Testa casos de sucesso e de falha: as entradas devem mudar de 'RUNNING' para 'SUCCESS' ou 'FAILED' e incluir contagens e mensagens. Usa as consultas anteriores para confirmar alertas e métricas.

Conclusão

Uma tabela de auditoria de cargas simples permite rastrear ETL, diagnosticar erros e medir desempenho. Próximos passos: integrar com ferramentas de monitorização, armazenar assinaturas de ficheiros e registar hashes para deteção de duplicados. Dica: começa pequeno e acrescenta campos conforme as necessidades de investigação de falhas.