Saltar al contenido
Docs

Esta página aún no está traducida — estás leyendo la versión en portugués. Ver en portugués

PreviewActualizado el 2026-09-08

Qualidade, deduplicação, rejeitados e quarentena

Como o Ingestia limpa os dados na Silver — regras de qualidade, deduplicação, contagem de rejeitados e o papel do Bronze como retenção do cru.

En esta página (9)

Estado: Preview. As regras de qualidade e deduplicação são provadas por teste determinístico e congeladas pelo conjunto de testes de referência; a materialização real no datalake = NÃO MEDIDO. Dados de exemplo sintéticos.

Leia antes: conceitos-fluxo-de-dados.md. Referência da camada Silver em pipeline-medalhao.md.


O princípio: o cru nunca se perde#

A qualidade do Ingestia é aplicada na passagem Bronze → Silver. A garantia central é que o Bronze é imutável e verbatim: cada linha da origem entra como texto, sem conversão, com carimbos de auditoria. Portanto, nenhuma linha some — mesmo uma linha reprovada na limpeza continua existindo no Bronze, disponível para inspeção e reprocessamento.

código
Bronze (tudo, cru) → regras de qualidade + dedupe → Silver (só o válido, limpo)
                                    │
                                    └──▶ rejeitadas = Bronze − Silver (contadas, visíveis)

As regras de qualidade (exemplo de referência)#

A implementação de referência (tabela sintética vendas) aplica as regras linha a linha. Uma reprovação = a linha não entra na Silver e é contada em rejectedRows:

RegraComportamento
Status canceladodescartado
Quantidadeinteiro > 0, senão descarta
Preçoaceita BR (1.299,90) e US (199.90); > 0, senão descarta
DataYYYY-MM-DD válida, senão descarta; deriva mes = YYYY-MM
UFnormaliza para 2 letras maiúsculas, senão descarta
pedido_idobrigatório
Categoria vaziavira "Sem categoria" (não descarta)
Deduplicaçãopor pedido_id, mantém a 1ª ocorrência
receitaderivada = preço × quantidade

Note a diferença entre descartar (a linha reprovou uma regra dura) e corrigir (categoria vazia vira "Sem categoria" — a linha é mantida). O produto corrige quando é seguro e descarta quando não é.

Rejeitados: a diferença é sempre visível#

O número de linhas rejeitadas é sempre explícito:

código
rejectedRows = bronzeRows − silverRows

Cada execução grava esse trio (Bronze / Silver / rejeitadas) no histórico de execuções. Você vê, a cada run, quantas linhas entraram cruas, quantas sobreviveram à limpeza e quantas ficaram de fora. Nada é descartado em silêncio.

Deduplicação#

A deduplicação acontece na Silver, por chave de negócio (no exemplo, pedido_id), mantendo a primeira ocorrência. Duplicatas subsequentes da mesma chave são descartadas (e entram na conta de rejeitadas). Isso torna a Silver idempotente por chave, mesmo que a origem envie a mesma linha mais de uma vez.

"Quarentena": o que o produto realmente faz (honestidade)#

Não existe hoje uma tabela de quarentena separada para linhas reprovadas na camada Silver. O que existe — e cumpre o mesmo papel — é a combinação:

  1. Bronze verbatim guarda todas as linhas cruas (a "retenção" do que chegou);
  2. o contador de rejeitadas (bronzeRows − silverRows) torna a perda mensurável;
  3. o saneamento automático de carga preserva linhas problemáticas de arquivo em vez de inventar dado (linha não-parseável é mantida como está).

Em outras palavras: você não perde o dado rejeitado (ele está no Bronze) e sabe quanto rejeitou (contador), mas o Ingestia não promete hoje uma fila de quarentena dedicada com fluxo de correção/reenvio por linha. Não confunda isto com a DLQ, que é para execuções (jobs) que falham — não para linhas de dado. Veja tratar-falha-dlq.md.

Schema drift: o mart não quebra em silêncio#

Quando o schema da fonte muda, o Ingestia compara o baseline salvo com o schema atual:

MudançaSeveridadeEfeito
coluna/tabela novainfoaditivo — o mart não quebra
coluna removidaatencaoo mart que a lê quebra
tipo mudadoatencaocast/agregação a jusante quebra
tabela removidaatencao—

A severidade reportada é a pior encontrada; o mart é marcado como "quebra" quando há atencao. Isso te avisa antes de um dashboard mostrar número errado.

Profiling seguro (amostra que não vaza)#

Ao catalogar uma tabela, o profiling calcula por coluna: tipo declarado × inferido, % de nulos, distintos (estimativa), min/max, comprimento e até 5 exemplos. A segurança é embutida:

  • Coluna PII → exemplos viram •••; min/max/distintos/comprimento suprimidos.
  • Coluna oculta por governança → nem aparece (o nome não viaja).
  • Tetos: 50 colunas, exemplo 60 chars, payload ≤ 32 KiB.

Quando usar / quando não usar estas garantias#

  • Confie nelas para: medir a saúde de uma fonte (taxa de rejeição), evitar duplicatas por chave, e ser avisado de mudanças de schema.
  • Não conte com: uma fila de quarentena por linha com reenvio automático (não existe hoje), nem com deleção física propagada por watermark puro (veja conceitos-modos-de-carga.md).

Relacionados#


Última revisão: 2026-09-08.

Enlaces relacionados