Como criar uma tabela de auditoria de cargas em Data Warehouse
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.