Pular para o conteúdo

Histórico e retomada sem duplicar

Aula 5 de 127 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: 7 min.

Objetivo: Executar backfill com checkpoint

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

Objetivo#

Ao final desta aula você vai executar backfill com checkpoint — trazer histórico anterior à janela do dia a dia, escolhendo a forma certa e sabendo o que a escrita faz no destino.

Vídeo#

Identificador no manifesto: acd-220-05-backfill-e-checkpoint · duração-alvo 7 min · tela do produto: /sources.

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

#Minutagem-alvoCapítuloTela do produto
10:00–0:40Abertura: título + selo. O que é backfill e a frase-âncora: horário de execução ≠ intervalo dos dados./sources
20:40–2:20Etapa Operação → Dias para retroagir: a janela que roda junto com cada execução agendada./sources
32:20–4:10Reprocessar período entre os quatro modos de recuperação; a prévia e a política de escrita declarada./dags
44:10–5:40Checkpoint: lê antes de extrair, grava a cada lote aceito, limpa ao concluir; teto de paginação e hadMore./dags
55:40–7:00Ativar a agenda não recupera intervalos perdidos; encerramento com o "faça você mesmo"./sources

Conteúdo#

Catchup nunca é implícito

Ligar a agenda não dispara recuperação histórica. Os intervalos que passaram enquanto a agenda estava desligada aparecem como informação na revisão ("intervalos perdidos"), mas não são executados sozinhos. Quem decide processar o atraso é você, com Executar agora ou Reprocessar período.

Backfill é trazer o que está atrás da janela

Backfill é trazer o histórico anterior à janela que o dia a dia cobre — por exemplo, os últimos 24 meses quando a carga diária só olha os últimos dias. Use quando acabou de conectar uma fonte, mudou uma regra de negócio, ou precisa reprocessar um período específico.

As três formas, e qual escolher

FormaComo se fazQuando é a certa
Full pontualRode uma carga Full uma vezCobre todo o histórico de uma vez; é o caminho natural da 1ª carga
Janela amplaAumente Dias para retroagir na etapa OperaçãoO histórico já está lá e você quer recalcular um período recente maior
Primeira extração do conectorBasta rodar a primeira execuçãoEla já é o backfill: percorre a paginação até o teto; as seguintes retomam por checkpoint

Depois do backfill, volte ao dia a dia (Append), que é mais barato. Backfill lê muito — é a operação mais cara do curso.

"Dias para retroagir" não é um teto global

Três números diferentes convivem no produto, e confundi-los gera expectativa errada:

OndeCampo / limiteValor
Etapa Operação do pipelineDias para retroagir (janela de reprocessamento que roda junto com cada execução)0 a 365 · 0 = só o período atual
Reprocessar período (recuperação)Teto da janela pedida de uma vez366 dias
Refresh incremental de snapshot por período (painéis/marts)Janela recentepadrão 7 dias · teto 400

A frase que a própria tela exibe resolve o resto: "Horário de EXECUÇÃO ≠ intervalo dos DADOS. O horário acima diz quando a carga roda; a janela de reprocessamento (dias para retroagir) diz que período é processado."

Reprocessar período: ler a política de escrita antes de confirmar

Na recuperação de uma execução existem quatro modos distintos — e antes eles pareciam a mesma coisa:

ModoO que faz
Nova tentativa da tarefaRoda de novo só a tarefa escolhida, como tentativa seguinte da mesma execução. Não mexe nas dependentes
Reexecutar tarefa e dependentesRoda a tarefa e todas as que leem o resultado dela — o que estava materializado a partir dela é refeito
Executar o pipeline de novoExecução nova do pipeline inteiro, sem recorte
Reprocessar períodoReextrai um intervalo de datas da origem e regrava só esse recorte no destino

O quarto só tem efeito de recorte quando existe uma coluna de recorte (a coluna-chave do Append). A prévia declara a política de escrita:

  • substituicao_total — a carga substitui a tabela inteira. O período não filtra nada: serve de rastro do que foi pedido, e a tela diz isso em vez de prometer um filtro que não acontece.
  • recorte_por_intervalo — a extração filtra coluna >= início AND coluna < fim e a escrita apaga só as linhas daquela janela antes de acrescentar as novas. Idempotente dentro da janela, sem tocar no resto do histórico.

A janela pedida é validada e as recusas são explícitas, porque cada uma delas apagaria ou reescreveria dado errado: sem início ou sem fim (não se inventa "últimos N dias"), início ≥ fim, fim no futuro, ou janela maior que o teto (seria recarga total disfarçada).

Checkpoint: retomar sem duplicar nem perder

Numa extração longa que é interrompida, o SDK de conectores usa um checkpoint:

  • lê o checkpoint antes de extrair;
  • grava depois de cada lote entregue — e só conta lote aceito;
  • limpa ao concluir, para que a próxima execução agendada recomece do zero.

A semântica importa: o checkpoint só existe entre a interrupção e a retomada. O retry vive abaixo da extração, então cada lote nunca é entregue duas vezes. Conectores de arquivo pulam blobs já processados (nome ≤ último processado) para não reprocessar.

Tetos que você precisa saber de cabeça

LimiteValor
Paginação de extração (teto duro, anti-loop)10.000 páginas · 5.000.000 linhas
Carga para a BronzebatchSize padrão 5.000 · maxRows padrão 200.000 (até 5.000.000)
Literal de cursor≤ 64 caracteres, sem aspas, barra ou quebra

Quando a extração bate o teto, ela sinaliza hadMore: há mais na origem. Aí você amplia o teto conscientemente ou fatia o backfill por período — não aumente no escuro.

Exemplo: a Comércio Aurora

Maria conectou vendas e quer os últimos 90 dias. Caminho: (1) roda um Full uma vez, que traz o histórico até o teto de paginação; (2) troca vendas para Append com atualizado_em; (3) deixa Dias para retroagir = 7 na Operação, para recuperar vendas que chegam atrasadas; (4) quando descobre que janeiro veio errado por causa de uma regra antiga, usa Reprocessar período de 2026-01-01 a 2026-02-01, lê na prévia que a política é recorte_por_intervalo e confirma — o resto do histórico não é tocado. Se a prévia dissesse substituicao_total, ela saberia que a tabela inteira seria reescrita e decidiria com essa informação.

Erros comuns

SintomaCausa provávelO que fazer
Backfill "incompleto"Bateu o teto de paginação (hadMore)Amplie o teto conscientemente ou fatie por período
Dados atrasados não entramChegaram com data fora da janelaAumente Dias para retroagir ou faça um full
Reprocessei o período e a tabela inteira mudouA política era substituicao_totalLeia a política na prévia antes de confirmar; sem coluna de recorte não há filtro
Liguei a agenda e o atraso não foi processadoCatchup nunca é implícitoUse Executar agora ou Reprocessar período
Reprocessei duas vezes e duplicouTarefa Silver/Gold em append (INSERT)Troque para full (recria) ou declare deduplicação
Janela recusadaSem início/fim, invertida, no futuro ou acima do tetoInforme o período explicitamente, dentro de 366 dias

O que é Preview aqui

As regras de janela, a validação de período e a retomada por checkpoint são provadas por teste determinístico. A execução real em BigQuery / Cloud Run é Preview; a idempotência no destino do recorte por intervalo depende da nuvem e a tela declara quando isso não foi verificado, em vez de afirmar que foi. Custo faturado em BRL permanece não medido.

Faça você mesmo#

No workspace de treino Aurora Varejo, em vendas, com dados sintéticos cujo histórico você conhece.

  1. Em /sources, abra o pipeline de vendas e, na etapa Operação, leia o campo Dias para retroagir. Coloque 7 e leia o texto de ajuda.
  2. Leia a caixa "Horário de EXECUÇÃO ≠ intervalo dos DADOS" e explique para você mesmo a diferença em uma frase.
  3. Publique e rode um Full uma vez (o backfill inicial). Anote a contagem na Bronze e a data mais antiga presente.
  4. Troque vendas para Append com atualizado_em, publique e rode. Confirme que a contagem cresceu sem reler o histórico.
  5. Em /dags, na execução, abra a recuperação e escolha Reprocessar período. Peça uma janela de 90 dias e leia a prévia: política de escrita, tarefas incluídas e efeito no destino.
  6. Confirme o reprocessamento e, ao final, confira no Console de dados que apenas as linhas daquele período mudaram — a data mais antiga do passo 3 continua lá.
  7. Repita o mesmo reprocessamento e confirme que a contagem não mudou (idempotente dentro da janela).
  8. Peça de propósito uma janela inválida (fim no futuro, ou mais de 366 dias) e leia a recusa.

Você terminou quando o histórico de 90 dias está na Bronze, você leu a política de escrita na prévia antes de confirmar, o reprocessamento repetido não duplicou nada, e você consegue explicar por que ligar a agenda não recupera o atraso.

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#

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

Carregando seu progresso…