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

Como validar row counts em ELT: passo a passo

João Barros 22 de October de 2026 4 min de leitura

Validar row counts em ELT é uma tarefa simples mas crucial para garantir que as cargas estão completas e idempotentes. Este tutorial mostra como comparar contagens entre origem e destino, detetar perdas ou duplicados e automatizar checks com SQL e tabelas de controlo.

Pré-requisitos

  • Acesso a uma origem de dados (ex.: base de dados SQL, CSV) e a um destino (ex.: Delta, tabelas num Data Warehouse).
  • Permissões para ler na origem e escrever/consultar no destino.
  • Conhecimentos básicos de SQL e de criação de pipelines ELT.

Passo 1: Entender o objectivo do check de row counts

O objectivo é verificar que o número de registos carregados no destino corresponde ao número esperado da origem para uma janela temporal ou para a tabela completa. Isto ajuda a detetar falhas de ingestão, partições em falta ou duplicados introduzidos pelo processo ELT.

Passo 2: Definir a granularidade do check

Escolha se o check será por carga completa, por partição (ex.: data), ou por lote (ex.: hora). Para cargas incrementais, use uma coluna de watermark (ex.: last_modified) ou a coluna de data. A granularidade determina as queries SQL que vai usar.

Passo 3: Criar a query de contagem na origem

Escreva uma query simples na origem que devolva a contagem por dimensão escolhida. Exemplo usando SQL para contagem por data 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;

Passo 4: Criar a query de contagem no destino

Na tabela destino (por exemplo uma tabela Delta ou uma tabela em Data Warehouse), execute a mesma agregação. Deve usar as mesmas regras de filtro e transformação aplicadas no 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;

Passo 5: Comparar os resultados e calcular o delta

Combine as duas queries para obter uma tabela de comparação com delta e percentagem. Isto facilita detetar discrepâncias por partição.

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

Passo 6: Automatizar o check no pipeline ELT

Adicione um passo no pipeline ELT que execute a query de comparação e produza um resultado guardado numa tabela de auditoria. Em caso de diferença acima de um limiar (ex.: 1%), marque o job como falhado ou envie um 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;

Passo 7: Tratar erros comuns

Erros frequentes incluem diferenças por filtros divergentes, fusos horários inconsistentes, transformações aplicadas de forma desigual, ou cargas reordenadas a causar duplicados. Verifique as transformações no ELT, as conversões de timestamp e se a desduplicação é aplicada antes da contagem.

Verificar o resultado

Confirme que a tabela audit_row_counts tem registos para a janela testada e que os campos diff/pct_diff estão dentro do limiar aceitável. Para testes, force uma discrepância (ex.: carregar manualmente um registo) e confirme que o alerta é gerado.

Conclusão

Validar row counts em ELT ajuda a detetar perdas, duplicados e erros de transformação antes que cheguem aos relatórios. Próximos passos: adicionar checks de sums (valores agregados) e checks de chave única para cobertura mais completa. Dica: comece com checks simples por partição e aumente a complexidade conforme ganha confiança.