Pular para o conteúdo

Modos de carga: full, por período e por marca d'água; substituir ou acrescentar

Aula 2 de 128 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: 8 min.

Objetivo: Escolher modo pelo efeito no destino

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

Objetivo#

Ao final desta aula você vai escolher modo pelo efeito no destino — decidir por o que acontece com as linhas que já estão lá, não pelo nome bonito do modo.

Vídeo#

Identificador no manifesto: acd-220-02-modos-de-carga · duração-alvo 8 min · tela do produto: /sources.

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

#Minutagem-alvoCapítuloTela do produto
10:00–0:50Abertura: título + selo. O vocabulário do mercado (substituir · mesclar · acrescentar) e o que a tela do Ingestia realmente oferece./sources
20:50–3:00Etapa Carga: o seletor Tipo de ingestão com dois rádios — Full e Append — e a coluna-chave de controle que aparece só no Append./sources
33:00–5:20O cartão "Escrita no destino — efeito real", campo por campo: escrita, marca d'água, deduplicação, histórico fora da janela, deletes, mudança de schema./sources
45:20–6:50A tabela de decisão por cenário, e o aviso de quando um recurso marcado como incremental não vai carregar de forma incremental./sources
56:50–8:00Silver/Gold é outro contrato: full recria, append insere e reexecutar duplica. Encerramento com o "faça você mesmo"./sources

Conteúdo#

A Bronze tem exatamente dois modos de escrita

Full (substitui a tabela inteira) e Append (incremental por marca d'água, com uma coluna-chave de controle). Não existe "mesclar": nenhuma tela do pipeline pede chave de mesclagem, e a Bronze não faz upsert por chave de negócio. CDC — ler o log de transações da origem para capturar cada INSERT/UPDATE/DELETE — é Roadmap: não existe hoje.

O vocabulário do mercado × o que existe aqui

Quem vem de outra ferramenta chega com três palavras na cabeça: substituir, mesclar e acrescentar. Vale traduzir uma vez e nunca mais confundir:

Vocabulário do mercadoNo IngestiaO que acontece de fato
Substituir (replace / truncate-load)FullA tabela de destino é reescrita por completo a cada execução (LOAD WRITE_TRUNCATE).
Acrescentar (append)AppendRecorte por janela da coluna-chave: a janela é apagada no destino e as linhas extraídas são acrescentadas (DELETE da janela + LOAD WRITE_APPEND).
Mesclar (merge / upsert por chave)não existe na BronzeA deduplicação por chave de negócio é assunto das Transformações (Silver), onde há SQL.

A documentação de referência fala em "UPSERT por chave" ao descrever o refresh incremental de snapshot de painéis e marts — outro subsistema, com outra tela. Para a carga da Bronze, o contrato é o da tabela acima.

Os dois rádios da etapa Carga

Na etapa Carga, cada recurso tem o seletor Tipo de ingestão, com os textos fixos do produto:

  • Full — "Recarrega a tabela inteira a cada execução (substitui tudo)."
  • Append — "Inclui só os dados novos a cada execução (incremental)."

Escolhido Append numa tabela de banco, aparece o campo Coluna-chave de controle — uma coluna só, com datas/timestamps sugeridos primeiro (marcados "— data, ideal") e depois colunas de id/*_id. Append de banco sem coluna-chave bloqueia o avanço da etapa: a carga não saberia de onde continuar. Em fontes de arquivo não há coluna-chave a configurar: o Append é controlado pela data de chegada/upload do arquivo.

Há um detalhe que decide muita coisa: a janela do destino compara coluna >= TIMESTAMP(@inicio) AND coluna < TIMESTAMP(@fim). Logo uma coluna-chave numérica (um id sequencial) não serve para a escrita — a extração até sabe paginar por id, mas a carga não saberia apagar o recorte, e acrescentar sem apagar duplica. Isso é recusa explícita, com motivo na tela, não silêncio.

O cartão que vale mais que o rádio

O topo da etapa Carga traz "Escrita no destino — efeito real". Ele é a fonte da verdade da aula:

Campo do cartãoEm FullEm Append efetivo
Escritasubstitui a tabela inteira; reexecutar não duplicaapaga só a janela da coluna-chave (início inclusivo, fim exclusivo) e acrescenta; reexecutar a mesma janela termina no mesmo estado
Marca d'águanão se aplica — não há de onde continuargravada a cada carga e lida como ponto de partida da próxima
Deduplicaçãoa Bronze não deduplica por chave: o destino é o retrato atual da origemé a própria janela (apagada antes da carga)
Histórico fora da janelanão preservado — a tabela é reescrita inteirapreservado: linha fora do recorte não é lida, apagada nem reescrita
Deletes na origema linha apagada some porque a tabela é reescrita, não porque o delete foi lidonão somem: isto não é CDC, a deleção não aparece na coluna-chave
Mudança de schemacoluna nova entra na próxima carga completa; coluna removida deixa de existir no destinoidem — confira a Revisão antes de publicar

E há um aviso que você precisa aprender a ler: quando um recurso está marcado como Append mas o adaptador daquele conector não cumpre o contrato (ou a integração no executor ainda não está ativa), a tela diz, com nome e motivo, "N recursos marcados como incrementais NÃO vão carregar de forma incremental". A regra do produto é literal: não se chama de incremental o que substitui a tabela inteira.

Tabela de decisão

SituaçãoModoPor quê
Primeira carga de qualquer fonteFullA primeira extração já é o backfill; não existe marca anterior
Tabela pequena (poucos milhares de linhas)FullSimples e barato o bastante; evita manutenção de coluna-chave
Tabela grande que só cresce/atualiza, com atualizado_em confiávelAppendLê muito menos bytes e preserva o histórico fora da janela
A origem apaga linhas fisicamenteFullMarca d'água não vê deleção; só a carga completa reflete deleção física
A coluna crescente é um id numéricoFullServe para paginar, não para recortar a escrita (a janela é de tempo)
A origem não tem nenhuma coluna crescente estávelFullSem ponto de partida não há incremental
Preciso reprocessar um período antigoFull pontual ou reprocessamento por períodoVer a aula 5

A regra que sustenta tudo: o resultado incremental tem de ser idêntico ao refresh completo. Na menor dúvida de elegibilidade, o produto recusa o incremental e faz o full, com o motivo no log. Um refresh caro é problema de custo; um número errado é problema de produto.

Silver e Gold têm outro contrato

Nas transformações, o modo de carga é por tabela de destino e muda o efeito:

  • full → CREATE OR REPLACE TABLE: idempotente, recria a tabela.
  • append → INSERT INTO: reexecutar DUPLICA as linhas, porque não há chave declarada para deduplicar. A tela avisa e pede confirmação.

Exemplo: a Comércio Aurora

produtos tem 1.800 linhas e muda pouco → Full. filiais tem 12 linhas → Full. vendas tem milhões de linhas, só cresce e tem atualizado_em (timestamp) → Append com coluna-chave atualizado_em. clientes é o caso difícil: o CRM da Aurora apaga o cadastro quando o cliente pede exclusão, e nenhum sinal disso aparece em atualizado_em → Full, mesmo sendo tentador marcar Append.

Erros comuns

SintomaCausa provávelO que fazer
"Esperava CDC (updates e deletes)"CDC é RoadmapUse Append + reprocessamento; deletes não são capturados
Marquei Append e a tabela continua sendo substituídaO adaptador não cumpre o contrato, ou a integração no executor não está ativaLeia o aviso nominal na etapa Carga — ele diz o motivo
Append com id numérico recusadoA janela do destino é de tempoEscolha uma coluna de data/timestamp ou use Full
Linha apagada na origem continua no destinoMarca d'água não vê deleçãoFull periódico, ou recorte por período re-buscando dias inteiros
Reexecutei uma tarefa Silver e duplicouloadMode: append (INSERT INTO)Troque para full (recria) ou declare a deduplicação na Silver

O que é Preview aqui

A elegibilidade do incremental, a identidade "incremental == full" e o plano de carga são provados por teste determinístico (C07.1 = GA-candidato). A execução real em BigQuery e o custo faturado são Preview/não medidos. Nada aqui é "GA".

Faça você mesmo#

No workspace de treino Aurora Varejo (abra /sources no console). Monte a tabela de decisão sem publicar nada.

  1. Abra um rascunho de pipeline e vá até a etapa Carga com vendas, produtos e clientes marcados.
  2. Cenário 1 — produtos: deixe em Full. Leia o cartão "Escrita no destino — efeito real" e anote as linhas Deduplicação e Histórico fora da janela.
  3. Cenário 2 — vendas: troque para Append e escolha atualizado_em como Coluna-chave de controle. Compare as mesmas duas linhas do cartão com o que você anotou no passo 2.
  4. Ainda em vendas, tente escolher uma coluna de id numérico como coluna-chave e leia o motivo que a tela dá.
  5. Cenário 3 — clientes: marque Append, leia o que o cartão diz em Deletes na origem, e volte para Full justificando por escrito.
  6. Anote, em três linhas, qual modo cada tabela recebeu e qual frase do cartão sustenta a escolha.
  7. Confira na Revisão que a escrita de cada tabela aparece como você decidiu — e saia sem publicar.

Você terminou quando você tem uma tabela com três linhas (produtos → Full, vendas → Append + atualizado_em, clientes → Full), cada uma justificada por uma frase lida na tela, e consegue explicar por que "mesclar" não é uma opção da Bronze.

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…