Pular para o conteúdo

Passos pt-BR compilados em SQL determinístico

Aula 8 de 129 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: 9 min.

Objetivo: Compor substituir/texto/datas/dividir/condicional

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

Objetivo#

Ao final desta aula você vai compor substituir/texto/datas/dividir/condicional — montar uma transformação em passos pt-BR e ler o SQL determinístico que ela gera.

Vídeo#

Identificador no manifesto: acd-220-08-transformacoes-pt-br · duração-alvo 9 min · tela do produto: /sources.

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

#Minutagem-alvoCapítuloTela do produto
10:00–0:45Abertura: título + selo. Por que passos em pt-BR e não SQL direto: a lista de passos é versionada e compila sempre no mesmo SQL./sources
20:45–2:40Os passos de núcleo: selecionar, renomear, remover, converter, filtrar, deduplicar — com prévia do SQL ao vivo./sources
32:40–4:40substituir: valor exato × texto contido; maiúsculas/minúsculas; trocar nulo; apagar valor./sources
44:40–6:30texto e datas: as seis operações de cada um e quais exigem um número./sources
56:30–8:00dividir coluna e coluna condicional: o primeiro caso que casa vence; o senão./sources
68:00–9:00Modo Avançado (SQL livre) e quando NÃO usá-lo; encerramento com o "faça você mesmo"./sources

Conteúdo#

A lista de passos é o código

A transformação não é um texto de SQL que alguém digitou: é uma lista versionada de passos que o produto compila em SQL determinístico. Mesma lista, mesmo SQL, byte a byte — é isso que permite versionar, comparar duas versões e voltar atrás com segurança.

Os passos de núcleo

PassoO que fazDetalhe que importa
selecionarMantém só as colunas listadasA ordem da lista é a ordem de saída
renomearMuda o nome de uma colunaNome novo validado como identificador simples
removerDescarta colunasÚtil para tirar PII que não deve seguir para a Silver
converterMuda o tipo (com formato opcional)É aqui que texto vira data ou número
filtrarMantém só as linhas que satisfazem a condiçãoAs regras duras da aula 7 viram filtro
deduplicarChaves + manter primeiro ou último, com coluna de desempatemanter é relativo à ordem crescente da coluna de desempate

substituir: duas semânticas no mesmo passo

O passo substituir tem um campo modo que muda tudo:

  • valor exato — compara a célula inteira; compila para CASE WHEN. É o que você usa para "Minas" → "MG".
  • texto contido — troca toda ocorrência do trecho dentro do texto; compila para REPLACE. É o que você usa para tirar um prefixo repetido.

Três comportamentos declarados:

  1. Diferenciar maiúsculas de minúsculas é o padrão. Desligar exige que o valor procurado seja texto, e a comparação passa a ignorar caixa de forma consciente de Unicode (acento incluído).
  2. Trocar nulos é explícito. Informar de: nulo (só no modo valor exato) troca valores nulos pelo valor novo. Um texto ou número procurado nunca casa com nulo por acidente.
  3. Apagar é informar para: nulo (também só no modo valor exato): a célula vira nulo.

texto e datas: as operações disponíveis

Passo textoEfeito
maiusculas / minusculasCaixa alta / caixa baixa
apararRemove espaços nas pontas
extrair_esquerda / extrair_direitaPrimeiros / últimos n caracteres
preencher_zerosCompleta com zeros à esquerda até n caracteres

As três últimas exigem o número n (em caracteres, inteiro positivo).

Passo datasEfeito
extrair_ano / extrair_mes / extrair_diaComponente da data
truncar_mesPrimeiro dia do mês (é o que agrupa série mensal)
truncar_semanaInício da semana
diferenca_diasDiferença em dias; exige a segunda coluna (a data inicial)

dividir coluna e coluna condicional

dividir coluna quebra um texto por um separador literal (não é expressão regular; não pode ser vazio) e cria colunas novas com os nomes que você der, na ordem das partes. A coluna original permanece — nada se perde por dividir.

coluna condicional cria uma coluna nova a partir de uma lista de casos. Duas regras:

  • A ordem é semântica: o primeiro caso que casar vence. Reordenar casos muda o resultado — é por isso que a ordem é parte da definição versionada.
  • O valor de senão é usado quando nenhum caso casa; ausente, a coluna fica nula.

O nome da coluna nova não pode colidir com uma coluna existente.

O que a validação recusa (e por que isso é bom)

A montagem é fail-closed: nomes de coluna, tabela e dataset são validados como identificadores simples antes de entrar no SQL, e a categoria do tipo é conferida — substituir com texto procurado numa coluna numérica é recusado, texto sobre coluna não-textual é recusado, datas sobre coluna que não é data é recusado. Uma lista de passos inválida não salva e não compila: a recusa acontece nos dois lugares, de propósito.

Guiado e Avançado

O builder tem dois modos. No Guiado você monta passo a passo e lê a prévia do SQL ao vivo. No Avançado você escreve SQL livre — útil para o que o editor visual não cobre, com um custo real: o diff entre versões fica menos legível e a conferência passa a depender de você ler SQL. Prefira Guiado enquanto couber; lógica em código que o editor visual não representa não é apagada por você passar pela etapa.

Exemplo: a Comércio Aurora

filiais.uf chega sujo: "sp", " SP ", "Minas", vazio. A lista de passos de Maria:

código
1) texto: uf → aparar
2) texto: uf → maiusculas
3) substituir: uf, de "MINAS" para "MG", modo valor_exato
4) coluna_condicional: uf_valida
   · caso: uf em (SP, RJ, MG, ...) → "sim"
   · senão: "nao"
5) filtrar: uf_valida = "sim"

Resultado: " SP " e "sp" convergem para SP; "Minas" vira MG; o vazio não casa nenhum caso, recebe "nao" em uf_valida e é descartado pelo filtro — e aparece no contador de rejeitadas, não num painel errado. Em vendas, ela usa datas: data_pedido → truncar_mes para a série mensal e dividir_coluna em canal ("loja|online" com separador |) para separar origem e meio.

Erros comuns

SintomaCausa provávelO que fazer
"MINAS" não foi substituídoA caixa não bate e a comparação diferencia maiúsculasAplique maiusculas antes, ou desligue a diferenciação de caixa
Substituí e os nulos continuaramTexto procurado nunca casa nuloUse de: nulo explicitamente, no modo valor exato
Substituiu dentro da palavra sem eu quererModo texto contido (REPLACE)Troque para valor exato
A coluna condicional deu sempre o mesmo valorUm caso amplo está antes do específicoReordene: o primeiro que casa vence
"Coluna já existe" ao criar coluna novaColisão de nomeEscolha outro nome; o passo não sobrescreve coluna existente
O passo não salvouValidação recusou nome ou categoria de tipoLeia o erro: ele diz qual passo e qual coluna
Os números mudaram depois de reordenar passosA ordem é semânticaTrate a lista de passos como código: revise o diff antes de publicar

O que é Preview aqui

A lista versionada de passos e o compilador de SQL são determinísticos e congelados por testes (C04.3 e C04.4 = GA-candidato). A publicação real em BigQuery depende de nuvem e é Preview, sem SLA. Nada aqui é "GA".

Faça você mesmo#

No workspace de treino Aurora Varejo, sobre filiais (e, no final, vendas), com dados sintéticos.

  1. Em /sources, etapa Transformações, crie a Silver de filiais a partir da Bronze, no modo Guiado.
  2. Acrescente texto: uf → aparar e depois texto: uf → maiusculas. Leia a prévia do SQL e identifique as duas funções geradas.
  3. Acrescente substituir em uf: de "MINAS" para "MG", modo valor exato. Teste trocar para texto contido e explique a diferença no SQL.
  4. Crie a coluna uf_valida com coluna condicional: um caso para as UFs aceitas e senão = "nao". Depois inverta a ordem dos casos e observe o resultado mudar.
  5. Acrescente filtrar: uf_valida = "sim".
  6. Em vendas, acrescente datas: data_pedido → truncar_mes e confira que a coluna de mês aparece na prévia.
  7. Tente de propósito um passo inválido (ex.: texto sobre uma coluna numérica) e leia a recusa.
  8. Publique, rode e confira no Console de dados que filiais só tem UFs de duas letras maiúsculas — e que o contador de rejeitadas explica as linhas que ficaram de fora.

Você terminou quando filiais.uf está normalizado por passos pt-BR (não por SQL escrito à mão), você viu a ordem dos casos mudar o resultado, leu pelo menos uma recusa da validação, e o SQL da prévia é o mesmo a cada vez que você abre a transformação.

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.3 · C04.4 — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".

Carregando seu progresso…