Pular para o conteúdo

Quando a fonte muda de layout e quebra o pipeline em silêncio

· ETL, contrato de dados, qualidade

Em resumo: quando um fornecedor muda o layout de um arquivo (uma coluna a mais, ordem trocada, encoding diferente) sem avisar, um pipeline ingênuo continua rodando e desalinha as colunas, então o relatório sai com valores no campo errado, sem nenhum erro. A defesa é um contrato de dados que valida o arquivo na entrada e barra o que não bate.

Como uma mudança "pequena" corrompe tudo

Pipelines costumam ler a posição da coluna ("a terceira é o valor"). Se a fonte insere uma coluna no meio, a terceira passa a ser outra coisa, e o pipeline lê data como valor, ou mistura cliente com produto. Nada quebra; tudo fica errado. É o tipo de falha que só aparece quando alguém estranha o número, dias depois.

Por que o pipeline não acusa sozinho

Porque ele foi escrito para confiar no formato. Sem uma verificação explícita, ele faz o que mandaram: lê e processa. O pipeline executou a tarefa, mas não a tarefa certa, e essa é a essência do erro silencioso.

Contrato de dados: validar antes de processar

A ideia é o arquivo provar que está no formato esperado antes de entrar:

  1. Esquema esperado: nome e ordem das colunas, tipos, encoding.
  2. Validação na ingestão: se não bate com o contrato, para e avisa, não processa.
  3. Quarentena: o arquivo problemático fica retido para análise, não vira relatório (como funciona).
  4. Ler por nome, não por posição: robustez extra contra reordenação de colunas.

É o princípio contract-first de um pipeline confiável: a fonte muda, o contrato acusa primeiro.

Implemento essa blindagem em pipelines ETL/ELT. Recebe arquivos de terceiros que mudam sem aviso? Posso ajudar a proteger a entrada do seu pipeline.

Leia também

Um caso de dados por mês

Histórias reais do que quebra um pipeline e um fechamento — e como resolver. Sem spam, cancele quando quiser.

Esse problema parece o seu?

Uma conversa de 30 minutos, sem compromisso. Eu falo onde está o risco e o que resolver primeiro.