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

Como criar uma tabela de validação de dados em Data Warehouse

João Barros 04 de November de 2026 4 min de leitura

Vamos criar uma tabela de validação de dados em Data Warehouse para registar regras violadas durante as cargas ETL/ELT. Isto é útil para rastrear erros, facilitar correções e melhorar a qualidade dos dados ao longo do tempo.

Pré-requisitos

  • Ambiente de Data Warehouse (ex.: SQL Server, Azure Synapse, Amazon Redshift) com permissões para criar tabelas.
  • Padrão simples de ETL/ELT (ex.: Azure Data Factory, SSIS, dbt) para invocar validações.
  • Conhecimentos básicos de SQL e do formato das tabelas de origem e destino.

Passo 1: Definir o propósito e as regras de validação

Antes de criar a tabela, defina que tipos de validações quer registar. Exemplos comuns: valores nulos indevidos, tipos inválidos, intervalos fora do esperado, chaves duplicadas e referências a dimensões inexistentes. Escolha campos importantes para diagnosticar o erro (ex.: source_system, table_name, row_key, column_name, error_code, error_message).

Passo 2: Criar a estrutura da tabela de validação

Crie uma tabela central para armazenar eventos de validação. A tabela deve ser compacta mas informativa: inclua timestamps, identificadores de linha da origem e contexto da carga (batch_id ou 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 e tamanhos conforme o seu Data Warehouse. Em ambientes columnar (ex.: Redshift, Synapse dedicated SQL pool) pode ajustar tipos para compressão.

Passo 3: Implementar validações no pipeline ETL/ELT

Implemente as regras na etapa de transformação. Em ETL tradicional (SSIS) ou em ELT (SQL após load), use queries que identifiquem linhas inválidas e façam um INSERT para a tabela de validação em vez de bloquear a carga inteira.

-- 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 validações de integridade referencial, faça LEFT JOINs e registe linhas sem correspondência:

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

Passo 4: Classificar e gerir os erros

Use o campo severity para distinguir 'error' (impede carga de destino) e 'warning' (carrega-se mas regista-se). Pode automatizar alertas quando existirem erros críticos: enviar e-mail, criar ticket ou bloquear a promoção do dataset para produção.

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

Passo 5: Enriquecer a tabela com métricas e histórico

Inclua colunas adicionais se precisar de análise posterior: resolved_by, resolved_at, note. Crie vistas ou relatórios no Power BI para monitorizar tendências de erros por run, por tabela ou por tipo de erro.

ALTER TABLE validation_errors
ADD resolved_by VARCHAR(100), resolved_at DATETIME2, note VARCHAR(2000);

Verificar o resultado

Para confirmar, execute queries de verificação: conte erros por run_id, veja exemplos de linhas reportadas e teste cenários que gerem erros conhecidos. Exemplos:

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

Conclusão

Uma tabela de validação de dados em Data Warehouse permite monitorizar e resolver problemas de qualidade sem interromper todo o pipeline. Próximos passos: automatizar alertas, criar dashboards no Power BI e adicionar rotinas de correção automática para erros recorrentes. Dica: comece com poucas regras essenciais e vá aumentando conforme aprende quais erros impactam mais.