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

Como converter Parquet para Delta Lake em Databricks

João Barros 25 de July de 2026 4 min de leitura

Como converter Parquet para Delta Lake em Databricks é uma tarefa comum quando se pretende tirar partido das transacções ACID, Time Travel e optimizações do Delta. Este guia prático explica porquê e mostra passo a passo como transformar ficheiros Parquet em tabelas Delta, com exemplos em PySpark e verificações simples.

Pré-requisitos

  • Workspace Databricks e um cluster a correr um Databricks Runtime com suporte ao Delta.
  • Permissões de leitura/escrita no storage onde estão os ficheiros Parquet (ex.: /mnt/...).
  • Ficheiros Parquet de exemplo e um notebook em Python (PySpark).
  • Conhecimentos básicos de Spark DataFrame e SQL.

Passo 1: Inspecionar o ficheiro Parquet

Antes de converter, confirme o esquema e eventuais colunas de particionamento. Conhecer o esquema ajuda a decidir se precisa de fazer alinhamento de esquema ou renomeações.

# caminho do ficheiro Parquet
path_parquet = '/mnt/data/sample_parquet/'

# listar ficheiros e inspecionar schema
display(dbutils.fs.ls(path_parquet))
df = spark.read.parquet(path_parquet)
df.printSchema()
df.show(5, truncate=False)

Passo 2: Normalizar o esquema (opcional)

Se os ficheiros Parquet tiverem colunas com nomes diferentes ou tipos inconsistentes, normalize antes de escrever. Exemplo: uniformizar nomes e converter tipos.

# exemplo simples de normalização
from pyspark.sql.functions import col

# renomear coluna e ajustar tipo se necessário
df = df.withColumnRenamed('OldName', 'new_name')
df = df.withColumn('event_date', col('event_date').cast('date'))

Passo 3: Escrever para Delta com particionamento e evolução de esquema

Escreva o DataFrame para um diretório Delta. Use partitionBy para desempenho em leituras, e opções como mergeSchema para aceitar evoluções de esquema quando fizer append.

path_delta = '/mnt/data/delta/sample_delta/'

# primeira gravação: criar a tabela Delta (overwrite se estiver a testar)
df.write.format('delta') 
  .mode('overwrite') 
  .option('overwriteSchema', 'true') 
  .partitionBy('year') 
  .save(path_delta)

# caso vá concatenar ficheiros com evolução de esquema, use:
# df_new.write.format('delta').mode('append').option('mergeSchema','true').save(path_delta)

Passo 4: Registar a tabela Delta no metastore (opcional mas recomendado)

Registar a tabela facilita consultas SQL e integração com outras ferramentas. Pode criar uma tabela gerida/externa que aponta para a localização Delta.

# criar esquema se necessário
spark.sql('CREATE DATABASE IF NOT EXISTS analytics')

# registar tabela externa que aponta para a pasta Delta
spark.sql("CREATE TABLE IF NOT EXISTS analytics.sample_delta USING DELTA LOCATION '/mnt/data/delta/sample_delta/'")

# agora pode consultar com SQL
spark.sql('SELECT COUNT(*) FROM analytics.sample_delta').show()

Passo 5: Optimizar e gerir versões (OPTIMIZE e VACUUM)

Depois de carregar os dados, use OPTIMIZE para melhorar as leituras e VACUUM para remover ficheiros antigos (atenção à retenção). Estes comandos são úteis em produção.

# OPTIMIZE (requer cluster com suporte Delta e permissões)
spark.sql('OPTIMIZE analytics.sample_delta')

# VACUUM com cuidado (padrão 7 dias); aqui um exemplo com 168 horas = 7 dias
spark.sql('VACUUM analytics.sample_delta RETAIN 168 HOURS')

Verificar o resultado

Confirme que a conversão correu bem verificando a existência do _delta_log, consultando contagens e amostras, e listando a tabela no metastore.

# verificar diretório Delta e _delta_log
display(dbutils.fs.ls(path_delta))
display(dbutils.fs.ls(path_delta + '/_delta_log'))

# ler a tabela Delta e mostrar linhas
spark.read.format('delta').load(path_delta).show(5)

# verificar tabela no metastore
spark.sql('SHOW TABLES IN analytics').show()

Erros comuns: permissões no mount, coluna de particionamento ausente, conflito de tipos quando não usar mergeSchema. Se vir exceptions sobre incompatibilidade de esquema, reavalie a normalização do esquema ou use mergeSchema com append.

Conclusão

Converter Parquet para Delta Lake em Databricks permite tirar partido de funcionalidades avançadas como transacções ACID e optimizações de leitura. Próximos passos: automatizar o processo com Workflows, integrar com Unity Catalog para governação e testar OPTIMIZE com ZORDER. Dica: antes de VACUUM, confirme a retenção e faça um snapshot para evitar perda acidental de dados — quer experimentar converter um conjunto de dados maior para medir ganhos de I/O?