Pular para o conteúdo

Transformar dados com SQL e expressões

~30 minutos · um filtro, uma junção, uma coluna calculada

Grande parte do trabalho num fluxo de trabalho resume-se a um pequeno movimento repetido: pegar numa tabela, remodelá-la e escrever o resultado numa nova tabela. Este tutorial ensina esse movimento — selecionar e filtrar linhas, unir uma segunda tabela e adicionar uma coluna calculada — com as duas ferramentas a que recorre constantemente: SQL e expressões de coluna. Aprenda o padrão uma vez e aplica-se a quase todos os passos de transformação que alguma vez vai criar.

O objetivo aqui é a forma do trabalho e saber onde consultar as coisas — não memorizar funções. O PlaidCloud inclui mais de mil funções SQL; vai ligar-se à referência, nunca reproduzi-la.

Um único passo de tabela que lê uma tabela orders em bruto, mantém apenas as encomendas concluídas, une cada uma a uma tabela customers para obter a região e adiciona uma coluna calculada net_amount — escrevendo o resultado numa nova tabela orders_clean.

orders ─┐
├─► select · filter · join · calculated column ─► orders_clean
customers ─┘

Todas as tabelas de origem permanecem intactas. Um passo de transformação lê de uma ou mais origens e escreve num destino — os originais ficam exatamente como estavam, o que torna um fluxo de trabalho seguro de executar de novo e de auditar.

Antes dos passos, a distinção que vale a pena ter presente:

Ferramenta O que é Onde a escreve
SQL A consulta que seleciona, filtra e une tabelas inteiras O editor de SQL do passo
Expressão Uma única fórmula que produz o valor de uma coluna, linha a linha A célula de expressão do mapeador de colunas

Recorre ao SQL para decidir que linhas e que tabelas. Recorre a uma expressão para decidir o que uma coluna contém. Muitos passos permitem combinar ambos — um passo SQL para dar forma ao conjunto, células de expressão para calcular as colunas.

  • Uma área de trabalho PlaidCloud e um projeto onde trabalhar (comece uma avaliação gratuita se precisar de uma).
  • Duas tabelas já existentes no projeto — este tutorial pressupõe orders (com order_id, customer_id, status, amount, tax) e customers (com customer_id, region). Se não as tiver, o tutorial Carregar, transformar e publicar dados importa primeiro as tabelas a partir de CSV.
  • Um fluxo de trabalho aberto no Workflow Explorer — abra o separador Fluxos de trabalho de um projeto e faça duplo clique no fluxo de trabalho. Consulte Criar um fluxo de trabalho se ainda não tiver um.

Comece de forma restrita: obtenha apenas as colunas e as linhas que realmente pretende.

  1. Adicione um passo de transformação de tabela e abra o respetivo editor de SQL.

  2. Aponte a origem do passo para a sua tabela orders.

  3. Escreva uma consulta que mantenha apenas as colunas de que precisa e elimine as linhas de que não precisa:

    SELECT
    order_id,
    customer_id,
    amount,
    tax
    FROM orders
    WHERE status = 'completed'
    AND amount > 0

Essa cláusula WHERE é o filtro — tudo o que não seja uma encomenda concluída e com valor diferente de zero nunca chega ao destino. Selecionar apenas quatro colunas em vez de SELECT * mantém a tabela seguinte enxuta e a sua intenção evidente.

Escreva SQL para ser lido. Uma cláusula por linha, uma coluna por linha, CASE / WHEN alinhados — nunca uma linha única e densa. O botão Embelezar do editor (ou Shift+Alt+F, Shift+Option+F no macOS) reformata-o no local sem alterar o que faz. Consulte Embelezar (formatar) código nos editores.

Uma junção traz colunas de uma segunda tabela para junto da primeira, associadas por uma chave comum. Aqui pretende a region de cada encomenda, que se encontra em customers.

  1. Adicione customers como segunda origem do passo.

  2. Alargue a consulta para unir pela chave comum e obter a coluna de que precisa:

    SELECT
    o.order_id,
    o.customer_id,
    o.amount,
    o.tax,
    c.region
    FROM orders AS o
    INNER JOIN customers AS c
    ON o.customer_id = c.customer_id
    WHERE o.status = 'completed'
    AND o.amount > 0

INNER JOIN mantém apenas as encomendas que têm um cliente correspondente. Se preferir manter todas as encomendas mesmo quando nenhum cliente corresponde — com region a nulo — use antes LEFT JOIN. Uma chave de junção incorreta ou que não corresponde é a causa mais comum de uma junção que devolve linhas a mais ou a menos, por isso confirme o número de linhas na pré-visualização (próximo passo) antes de avançar.

Nomes de tabelas na consulta. Refira cada origem pelo nome que o passo lhe atribui. Nos armazéns Lakehouse predefinidos, o id físico de uma tabela pode conter hífenes — nesse caso, coloque-o entre acentos graves (por exemplo `analyzetable_9f3c...`) para que o motor o leia como um único identificador.

Passo 3: Adicionar uma coluna calculada com uma expressão

Seção intitulada “Passo 3: Adicionar uma coluna calculada com uma expressão”

Agora calcule um valor que não existe em nenhuma das origens. Uma coluna calculada (de expressão) executa uma fórmula por linha e escreve o resultado numa nova coluna. Adicione net_amount — o valor depois de impostos.

  1. No mapeador de colunas do passo, adicione uma nova coluna de destino com o nome net_amount.

  2. Na respetiva célula de expressão, escreva a fórmula:

    amount - tax
  3. Para qualquer situação condicional, as expressões incluem a lógica habitual. Por exemplo, um indicador de envio:

    (
    "free"
    if amount >= 100
    else "standard"
    )

Uma célula de expressão é uma única fórmula, não um script. É avaliada como uma expressão simples, pelo que uma expressão de várias linhas tem de incluir os seus próprios parênteses exteriores (como acima) — caso contrário, falha na execução. Limite cada célula ao valor de uma coluna; use o passo SQL para tudo o que abranja várias linhas ou tabelas.

A existência de uma determinada função, e o comportamento exato dos seus argumentos, depende da geração do Lakehouse em que o seu projeto é executado — as duas seguem motores de base diferentes. Não adivinhe o nome de uma função; consulte-o:

Lakehouse Biblioteca de funções
v1 Funções SQL do Databend
v2 Funções SQL do StarRocks 4.1

A referência de expressões é o ponto de partida — operações com texto, cálculo de datas, lógica condicional, conversão de tipos e agregações — com a sintaxe canónica de origem ligada para cada geração. Trate-a como a consulta a que regressa, não como algo para ler de uma ponta à outra.

O Embelezar também formata células de expressão, aplicando o espaçamento e as quebras de linha habituais do Python — útil para uma condicional longa.

Não precisa de executar todo o fluxo de trabalho para ver se o passo fez o que pretendia. O painel lateral Pré-visualização de dados mostra o resultado de um passo — as primeiras 100 linhas com colunas tipificadas — diretamente no Workflow Explorer.

  1. Execute apenas este passo para que produza a tabela de saída. (Enquanto não tiver sido executado uma vez, a pré-visualização indica “No data yet — run the step to generate this table.”)
  2. Abra a pré-visualização: selecione o passo e escolha Pré-visualizar dados de saída (também no menu de contexto do passo).
  3. Confirme a forma: as colunas que selecionou estão presentes, a region veio da junção, a net_amount foi calculada corretamente e o número de linhas reflete o filtro.

Com o painel aberto, selecionar qualquer outro passo redireciona a pré-visualização para o resultado desse passo — percorra uma cadeia de passos e veja os dados mudarem de forma em cada fase. Para ver além das primeiras 100 linhas, ou para segmentar e filtrar, clique em Abrir no Explorador de tabelas. Os detalhes completos estão em Pré-visualizar dados de um passo.

Cada um destes movimentos é a mesma primitiva:

Ler uma ou mais tabelas de origem, remodelá-las, escrever um novo destino. O SQL decide as linhas e as tabelas; as expressões decidem o valor de cada coluna; a pré-visualização confirma o resultado antes de se comprometer com uma execução completa. Encadeie alguns destes e tem um pipeline — o destino de cada passo passa a ser a origem do seguinte.

Escreva os resultados intermédios em tabelas quando um passo posterior ou um painel de controlo precisar dos dados materializados, e em vistas quando preferir calcular na leitura e poupar armazenamento — uma vista não contém dados próprios e atualiza-se automaticamente quando as suas origens mudam.

Quando uma transformação ultrapassa por completo o SQL e as expressões — Python à medida, um pacote externo, lógica personalizada — recorra a um passo User Defined Transform. Isso é a exceção, não o caso do dia a dia; o SQL e as expressões cobrem a esmagadora maioria do trabalho de modelação.