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-alvo | Capítulo | Tela do produto |
|---|---|---|---|
| 1 | 0:00–0:40 | Abertura: título + selo. O que é backfill e a frase-âncora: horário de execução ≠ intervalo dos dados. | /sources |
| 2 | 0:40–2:20 | Etapa Operação → Dias para retroagir: a janela que roda junto com cada execução agendada. | /sources |
| 3 | 2:20–4:10 | Reprocessar período entre os quatro modos de recuperação; a prévia e a política de escrita declarada. | /dags |
| 4 | 4:10–5:40 | Checkpoint: lê antes de extrair, grava a cada lote aceito, limpa ao concluir; teto de paginação e hadMore. | /dags |
| 5 | 5:40–7:00 | Ativar 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
| Forma | Como se faz | Quando é a certa |
|---|---|---|
| Full pontual | Rode uma carga Full uma vez | Cobre todo o histórico de uma vez; é o caminho natural da 1ª carga |
| Janela ampla | Aumente Dias para retroagir na etapa Operação | O histórico já está lá e você quer recalcular um período recente maior |
| Primeira extração do conector | Basta rodar a primeira execução | Ela 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:
| Onde | Campo / limite | Valor |
|---|---|---|
| Etapa Operação do pipeline | Dias 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 vez | 366 dias |
| Refresh incremental de snapshot por período (painéis/marts) | Janela recente | padrã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:
| Modo | O que faz |
|---|---|
| Nova tentativa da tarefa | Roda de novo só a tarefa escolhida, como tentativa seguinte da mesma execução. Não mexe nas dependentes |
| Reexecutar tarefa e dependentes | Roda a tarefa e todas as que leem o resultado dela — o que estava materializado a partir dela é refeito |
| Executar o pipeline de novo | Execução nova do pipeline inteiro, sem recorte |
| Reprocessar período | Reextrai 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 filtracoluna >= início AND coluna < fime 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
| Limite | Valor |
|---|---|
| Paginação de extração (teto duro, anti-loop) | 10.000 páginas · 5.000.000 linhas |
| Carga para a Bronze | batchSize 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
| Sintoma | Causa provável | O que fazer |
|---|---|---|
| Backfill "incompleto" | Bateu o teto de paginação (hadMore) | Amplie o teto conscientemente ou fatie por período |
| Dados atrasados não entram | Chegaram com data fora da janela | Aumente Dias para retroagir ou faça um full |
| Reprocessei o período e a tabela inteira mudou | A política era substituicao_total | Leia 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 processado | Catchup nunca é implícito | Use Executar agora ou Reprocessar período |
| Reprocessei duas vezes e duplicou | Tarefa Silver/Gold em append (INSERT) | Troque para full (recria) ou declare deduplicação |
| Janela recusada | Sem início/fim, invertida, no futuro ou acima do teto | Informe 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.
- Em
/sources, abra o pipeline devendase, na etapa Operação, leia o campo Dias para retroagir. Coloque7e leia o texto de ajuda. - Leia a caixa "Horário de EXECUÇÃO ≠ intervalo dos DADOS" e explique para você mesmo a diferença em uma frase.
- Publique e rode um Full uma vez (o backfill inicial). Anote a contagem na Bronze e a data mais antiga presente.
- Troque
vendaspara Append comatualizado_em, publique e rode. Confirme que a contagem cresceu sem reler o histórico. - 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. - 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á.
- Repita o mesmo reprocessamento e confirme que a contagem não mudou (idempotente dentro da janela).
- 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#
- data/tutoriais/executar-backfill
- data/ingestao-incremental-backfill
- orquestracao/recuperar-uma-falha
Capacidades ensinadas#
C07.1 — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".