Pular para o conteúdo

O mart não quebra em silêncio

Aula 10 de 126 minOperarAtualizada em 2026-10-04

Vídeo em produção

A gravação desta aula está no lote de produção. O objetivo, o exercício e a documentação já valem. Duração-alvo: 6 min.

Objetivo: Diagnosticar drift e aplicar saneamento

Selo de estado: Preview (teto atual do produto) · Curso ACD-220 — Pipelines e medalhão Bronze/Silver/Gold · Aula 10 de 12 · Atualizado em 2026-10-04.

Objetivo#

Ao final desta aula você vai diagnosticar drift e aplicar saneamento — ler a severidade de uma mudança de schema, saber o que o produto corrige sozinho e conduzir uma transição de tipo sem perder dado.

Vídeo#

Identificador no manifesto: acd-220-10-schema-drift-e-saneamento · duração-alvo 6 min · tela do produto: /sources.

Roteiro de gravação (4 capítulos):

#Minutagem-alvoCapítuloTela do produto
10:00–0:40Abertura: título + selo. O que é drift e por que a severidade importa mais que o aviso./sources
20:40–2:30A tabela de severidades (info × atenção) e onde ela aparece: coluna nova, coluna removida, tipo mudado, tabela removida./sources
32:30–4:10Saneamento automático da carga: nome de coluna com acento/espaço, envelope JSON, array/pretty-JSON — e a regra de não inventar dado./dags
44:10–6:00Transição de tipo na Bronze: ver a incompatibilidade → conferir a prévia → acompanhar o resultado; encerramento com o "faça você mesmo"./dags

Conteúdo#

Aviso não é severidade

Coluna nova é info — aditivo, o mart não quebra. Coluna removida, tipo mudado e tabela removida são atenção — o mart que lê aquilo quebra. A severidade reportada é a pior encontrada, e o mart é marcado como "quebra" quando há qualquer atenção. É esse selo, não o volume de avisos, que decide se você precisa agir hoje.

O baseline: o que é schema e o que não é

A cada descoberta, o schema vira um baseline serializável com tabelas e colunas ordenadas por nome, guardando só {nome, tipo}. O que fica de fora de propósito: volume (número de linhas, tamanho). Volume não é schema — se entrasse, o baseline "mudaria" a cada estimativa e o drift viraria ruído.

A comparação é baseline × atual:

MudançaSeveridadeEfeito
Coluna novainfoAditivo — o mart não quebra
Tabela novainfoAditivo
Coluna removidaatençãoO mart que a lê quebra
Tipo mudadoatençãoConversão ou agregação a jusante quebra
Tabela removidaatenção—

Só as tabelas presentes nos dois lados têm as colunas comparadas; tabela que existe só de um lado vira "nova" (aditiva) ou "removida" (atenção).

Saneamento: o que o produto corrige sem perguntar

O saneamento é o fallback do load. A ingestão agendada puxa arquivos dos sistemas do cliente direto para a landing, e chaves com acento, espaço ou vazias ("preço", "nome do cliente") derrubariam o carregamento com "Invalid field name". Quando o carregamento NDJSON falha, o arquivo é saneado e recarregado:

Problema no arquivoO que o saneamento faz
Nome com acento, espaço ou maiúsculaMinúsculas, sem acento, com _
Nome vazioVira coluna
Nome que começa com númeroGanha prefixo col_
Envelope {meta…, data:[…]}É explodido: a lista de dentro passa a ser as linhas
JSON em array ou "bonitinho" (indentado)É convertido para NDJSON (um objeto por linha)
Linha que não se consegue interpretarÉ mantida como está — o produto não inventa dado

Essa última regra é a mais importante: o saneamento é conservador. Ele renomeia e reformata; ele nunca adivinha conteúdo.

Transição de tipo na Bronze: três passos, nenhum deles escreve antes do seu

O caso mais incômodo de drift é o tipo mudar na origem: a coluna no destino é DATE e a origem passou a mandar texto, ou o inverso. Acrescentar linha não muda o tipo de uma coluna que já existe, e o BigQuery recusaria valor a valor — então a janela é parada, não forçada. A jornada tem três passos:

1. Ver a incompatibilidade. Só leitura: o campo, o tipo atual no destino, o tipo que a origem mandou e a janela parada (início → fim). As linhas daquela janela ficam guardadas numa tabela de recepção, com o valor original preservado, e o destino não foi tocado. Os exemplos de formato mostrados são sintéticos — nenhum valor de cliente aparece ali; eles servem para você ver as duas formas que convivem na mesma coluna, porque é a convivência que produz a incompatibilidade.

2. Conferir a prévia. Também só leitura, e é aqui que se decide: tipo atual × tipo proposto, preservação dos valores (os números que a contagem de linhas não dá), consumidores afetados — ou explicitamente "não verificados", quando não foi possível checar —, custo estimado e teto, escrita prevista e o recurso de recuperação. Abrir esta tela e preparar a prévia não alteram tipo, não disparam carga e não ativam agenda; está escrito na tela e é conferido no servidor.

3. Acompanhar o resultado. Auditoria, identidade da operação, ponto de retorno — e o limite desse ponto de retorno, dito sem promessa que não se sustenta: um ponto de retorno é um clone de um instante, e o produto não chama isso de "restauração integral".

Exemplo: a Comércio Aurora

O ERP da Aurora acrescenta canal_venda em vendas: drift info, aditivo — o mart segue funcionando e Maria decide com calma se vai usar a coluna nova. Na mesma semana, data_pedido passa a chegar como texto "03/01/2026" numa coluna que no destino é data: drift de tipo mudado, severidade atenção, mart marcado como "quebra". A janela das 14h fica parada na tabela de recepção com os valores originais; Maria abre a prévia, vê que a conversão proposta preserva todos os valores e que 2 consumidores (um mart Gold e um painel) são afetados, confere o custo estimado contra o teto e aplica. Um mês depois o CRM remove telefone de clientes: atenção, e a transformação Silver que lia a coluna precisa ser ajustada antes da próxima carga.

Erros comuns

SintomaCausa provávelO que fazer
Coluna nova na origem não apareceuDrift não propagado para a BronzeReexecute a descoberta/carga da fonte; na carga completa a tabela é recriada com o schema detectado
Tipo mudou e a Silver/Gold quebrouMudança de tipo incompatívelAjuste a transformação ao novo tipo, ou conduza a transição de tipo
Carga falhou com "Invalid field name"Nome de coluna com acento/espaço/vazioO saneamento já tenta; confira o log para ver qual nome foi reescrito
A linha estranha continua estranhaRegra conservadora: não-parseável é mantidaCorrija na origem; o produto não inventa dado
Vi muitos avisos e entrei em pânicoVários info não quebram nadaOlhe a severidade: só atenção marca o mart como "quebra"
Coluna aninhada não aparece no painelEstruturas e listas não são publicadas nos martsPublique colunas planas no Gold
A janela ficou parada e nada avançouIncompatibilidade de tipo detectadaÉ o comportamento desejado: conduza os três passos da transição

O que é Preview aqui

O baseline, a comparação de schema e o saneamento são determinísticos e provados por teste (C04.2 = GA-candidato). A aplicação da transição no BigQuery, os consumidores afetados e o custo real dependem de nuvem — Preview. Quando o produto não consegue verificar os consumidores, ele diz "não verificados" em vez de afirmar que está tudo bem. Nada aqui é "GA".

Faça você mesmo#

No workspace de treino Aurora Varejo, em vendas, só com dados sintéticos.

  1. Rode uma carga de vendas e guarde o schema atual como referência (anote colunas e tipos).
  2. Provoque um drift aditivo: acrescente na origem sintética uma coluna canal_venda e rode de novo. Confirme que a severidade é info e que o mart não foi marcado como "quebra".
  3. Provoque um drift de atenção: remova (na origem sintética) uma coluna que a sua transformação Silver usa e rode. Confirme a severidade atenção e identifique qual mart é marcado como "quebra".
  4. Ajuste a transformação Silver para o novo schema e rode novamente até a severidade voltar ao normal.
  5. Exercite o saneamento: importe um CSV cujo cabeçalho tenha preço e nome do cliente. Depois da carga, veja no Console de dados com que nomes as colunas chegaram à Bronze.
  6. Importe um JSON em formato de envelope ({meta: …, data: [ … ]}) e confirme que as linhas de dentro viraram as linhas da tabela.
  7. Se houver uma incompatibilidade de tipo disponível no ambiente de treino, abra a jornada de transição e pare no passo 2: leia a prévia inteira (preservação de valores, consumidores, custo e teto) sem aplicar.

Você terminou quando você produziu um drift info e um drift atenção e sabe qual deles exige ação hoje, viu os nomes de coluna reescritos pelo saneamento na Bronze, e leu uma prévia de transição de tipo sem ter alterado nada.

Checagem rápida#

Três perguntas no final da aula, corrigidas no servidor. A aula só conta como concluída depois da checagem.

Documentação relacionada#

Capacidades ensinadas#

C04.2 — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".

Carregando seu progresso…