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-alvo | Capítulo | Tela do produto |
|---|---|---|---|
| 1 | 0:00–0:45 | Abertura: 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 |
| 2 | 0:45–2:40 | Os passos de núcleo: selecionar, renomear, remover, converter, filtrar, deduplicar — com prévia do SQL ao vivo. | /sources |
| 3 | 2:40–4:40 | substituir: valor exato × texto contido; maiúsculas/minúsculas; trocar nulo; apagar valor. | /sources |
| 4 | 4:40–6:30 | texto e datas: as seis operações de cada um e quais exigem um número. | /sources |
| 5 | 6:30–8:00 | dividir coluna e coluna condicional: o primeiro caso que casa vence; o senão. | /sources |
| 6 | 8:00–9:00 | Modo 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
| Passo | O que faz | Detalhe que importa |
|---|---|---|
| selecionar | Mantém só as colunas listadas | A ordem da lista é a ordem de saída |
| renomear | Muda o nome de uma coluna | Nome novo validado como identificador simples |
| remover | Descarta colunas | Útil para tirar PII que não deve seguir para a Silver |
| converter | Muda o tipo (com formato opcional) | É aqui que texto vira data ou número |
| filtrar | Mantém só as linhas que satisfazem a condição | As regras duras da aula 7 viram filtro |
| deduplicar | Chaves + manter primeiro ou último, com coluna de desempate | manter é 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:
- 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).
- 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. - 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 texto | Efeito |
|---|---|
maiusculas / minusculas | Caixa alta / caixa baixa |
aparar | Remove espaços nas pontas |
extrair_esquerda / extrair_direita | Primeiros / últimos n caracteres |
preencher_zeros | Completa com zeros à esquerda até n caracteres |
As três últimas exigem o número n (em caracteres, inteiro positivo).
| Passo datas | Efeito |
|---|---|
extrair_ano / extrair_mes / extrair_dia | Componente da data |
truncar_mes | Primeiro dia do mês (é o que agrupa série mensal) |
truncar_semana | Início da semana |
diferenca_dias | Diferenç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:
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
| Sintoma | Causa provável | O que fazer |
|---|---|---|
| "MINAS" não foi substituído | A caixa não bate e a comparação diferencia maiúsculas | Aplique maiusculas antes, ou desligue a diferenciação de caixa |
| Substituí e os nulos continuaram | Texto procurado nunca casa nulo | Use de: nulo explicitamente, no modo valor exato |
| Substituiu dentro da palavra sem eu querer | Modo texto contido (REPLACE) | Troque para valor exato |
| A coluna condicional deu sempre o mesmo valor | Um caso amplo está antes do específico | Reordene: o primeiro que casa vence |
| "Coluna já existe" ao criar coluna nova | Colisão de nome | Escolha outro nome; o passo não sobrescreve coluna existente |
| O passo não salvou | Validação recusou nome ou categoria de tipo | Leia o erro: ele diz qual passo e qual coluna |
| Os números mudaram depois de reordenar passos | A ordem é semântica | Trate 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.
- Em
/sources, etapa Transformações, crie a Silver defiliaisa partir da Bronze, no modo Guiado. - Acrescente
texto: uf → aparare depoistexto: uf → maiusculas. Leia a prévia do SQL e identifique as duas funções geradas. - Acrescente
substituiremuf: de"MINAS"para"MG", modo valor exato. Teste trocar para texto contido e explique a diferença no SQL. - Crie a coluna
uf_validacom coluna condicional: um caso para as UFs aceitas esenão = "nao". Depois inverta a ordem dos casos e observe o resultado mudar. - Acrescente
filtrar: uf_valida = "sim". - Em
vendas, acrescentedatas: data_pedido → truncar_mese confira que a coluna de mês aparece na prévia. - Tente de propósito um passo inválido (ex.:
textosobre uma coluna numérica) e leia a recusa. - Publique, rode e confira no Console de dados que
filiaissó 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".