Conceito e mecanismo
Define o que representa uma linha antes de transformar. Um movimento pode ter várias mensagens, e uma conta pode ter várias versões de referência. Um join por chave incompleta multiplica linhas; trocar INNER por LEFT preserva linhas sem correspondência, mas não elimina multiplicação por várias correspondências. Usa as chaves e o período de validade exigidos pelo modelo. Em PySpark, transformações produzem novos DataFrames e são avaliadas quando uma ação exige resultados. Guarda a referência devolvida por filter ou drop; o objeto anterior mantém o seu plano. Evita recolher grandes resultados no driver para tarefas que podem permanecer distribuídas. Uma pré-visualização pequena não demonstra comportamento sob volume real.
Aplicação guiada
Para um ficheiro de reconciliação fictício, compara contagens antes e depois de cada etapa. try_cast pode converter texto inválido em NULL numa conversão escalar suportada; trata esse resultado, em vez de o somar como se fosse zero. count(*) conta linhas, enquanto count(coluna) exclui valores nulos. UNION ALL preserva repetições; UNION remove linhas totalmente iguais, sem escolher a versão mais recente por chave. explode cria linhas a partir de arrays e não produz linhas para um array NULL; escolhe a variante outer quando precisas de preservar esse caso. Para uma agregação gold consultada repetidamente, uma materialized view pode reduzir trabalho de leitura, com frescura dependente do refresh e possibilidade de recomputação completa.
Um join com duas correspondências por movimento duplica o montante agregado.
Armadilhas comuns
DISTINCT para esconder join errado; NULL como zero; transformação sem atribuição; refresh assumido instantâneo.
Tópicos relacionados: Plataforma, compute e contratos de dados · Ingestão incremental, estado e esquema · Jobs, dependências e recuperação
Valida a granularidade e reconcilia resultados, além de verificar sintaxe.
Referência: PySpark DataFrames and evaluation · 2026-05-04