(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como criar uma tabela Delta com colunas calculadas em Lakehouse

João Barros 01 de October de 2026 4 min de leitura

Criar colunas calculadas persistidas numa tabela Delta no Lakehouse melhora o desempenho e facilita consultas repetidas. Este guia mostra como criar uma tabela Delta com colunas calculadas (dados transformados e armazenados) usando SQL e PySpark, explicando o porquê e apresentando um exemplo prático.

Pré-requisitos

  • Conta com acesso ao Microsoft Fabric e um Lakehouse configurado.
  • Acesso ao endpoint de SQL analytics ou a um notebook com PySpark.
  • Permissões para criar tabelas e escrever ficheiros no Lakehouse.

Passo 1: Entender por que criar colunas calculadas persistidas

Colunas calculadas podem ser expressões derivadas (ex.: datas formatadas, chaves compostas, flags). Se calculares essas colunas na consulta, pagas custo de CPU repetidamente. Persisti-las numa tabela Delta reduz o custo de leitura e acelera as queries, especialmente em relatórios e modelos Power BI.

Passo 2: Planear as colunas calculadas

Decide quais campos derivar e se deverás actualizar essas colunas no futuro (ex.: base raw + transformação). Exemplos comuns: data_particao, is_high_value, customer_region. Planifica também o particionamento e os tipos de dados.

Passo 3: Criar uma tabela Delta a partir de dados brutos (SQL)

Se tiveres um CSV ou tabela raw, cria uma tabela Delta e adiciona colunas calculadas no SELECT. Aqui está um exemplo usando SQL no endpoint de SQL analytics.

CREATE OR REPLACE TABLE lakehouse.catalog.schema.sales_delta AS SELECT   sale_id,   customer_id,   amount,   sale_date,   CAST(date_trunc('day', sale_date) AS date) AS sale_day,   CASE WHEN amount > 1000 THEN true ELSE false END AS is_high_value,   concat(customer_id, '-', year(sale_date)) AS customer_year_key FROM lakehouse.catalog.schema.raw_sales;

Passo 4: Criar/actualizar colunas calculadas com PySpark

Numa notebook PySpark podes ler a fonte, calcular colunas e gravar como Delta. Útil para transformações mais complexas ou pipelines programáticos.

from pyspark.sql import functions as F

raw = spark.read.format("delta").table("lakehouse.catalog.schema.raw_sales")

transformed = raw.withColumn("sale_day", F.to_date(F.trunc("sale_date", "DAY"))) \
                  .withColumn("is_high_value", F.col("amount") > 1000) \
                  .withColumn("customer_year_key", F.concat(F.col("customer_id"), F.lit("-"), F.year(F.col("sale_date"))))

transformed.write.format("delta").mode("overwrite").saveAsTable("lakehouse.catalog.schema.sales_delta")

Passo 5: Actualizar colunas calculadas em dados novos (MERGE)

Quando chega nova ingestão, actualiza a tabela Delta para calcular as colunas persistidas usando MERGE (upsert). Assim manténs as colunas sincronizadas.

MERGE INTO lakehouse.catalog.schema.sales_delta AS target
USING (SELECT * FROM lakehouse.catalog.schema.raw_sales_stage) AS src
ON target.sale_id = src.sale_id
WHEN MATCHED THEN UPDATE SET
  target.amount = src.amount,
  target.sale_date = src.sale_date,
  target.sale_day = CAST(date_trunc('day', src.sale_date) AS date),
  target.is_high_value = CASE WHEN src.amount > 1000 THEN true ELSE false END,
  target.customer_year_key = concat(src.customer_id, '-', year(src.sale_date))
WHEN NOT MATCHED THEN INSERT *;

Passo 6: Boas práticas e erros comuns

Usa tipos de dados apropriados (date, boolean) para reduzir espaço. Evita recalcular colunas já persistidas nas queries. Se a lógica de cálculo mudar, faz uma migração controlada: cria nova coluna, popula, valida e depois remove a antiga. Erro comum: particionar por muitas colunas calculadas pequenas — isso cria muitos ficheiros pequenos.

Verificar o resultado

Confirma que as colunas existem e contêm os valores esperados com consultas simples. Verifica também o plano de execução para observar melhoria nas queries que usavam a expressão em runtime.

SELECT sale_id, amount, sale_date, sale_day, is_high_value, customer_year_key
FROM lakehouse.catalog.schema.sales_delta
LIMIT 20;

Para validar o desempenho, compara o tempo da query antes (sem colunas persistidas) e depois (com colunas). Usa EXPLAIN para ver se a expressão foi removida do runtime.

Conclusão

Persistir colunas calculadas em tabelas Delta no Lakehouse reduz custo e acelera consultas, especialmente em relatórios e ETL recorrente. Próximos passos: automatizar a actualização com pipelines (Delta Live Tables ou um orchestrator) e monitorizar espaço e desempenho. Dica: começa por persistir apenas as colunas mais dispendiosas de calcular — qual é a primeira coluna que vais persistir na tua tabela?