Como usar VACUUM numa tabela Delta no Lakehouse do Fabric
À medida que atualizas, apagas e otimizas uma tabela Delta no Lakehouse, acumulam-se ficheiros de dados que já não pertencem à versão atual da tabela, mas continuam a ocupar espaço no OneLake. O comando VACUUM serve exatamente para limpar esses ficheiros antigos de forma controlada, recuperando armazenamento sem afetar os dados atuais. A seguir vês como aplicar o VACUUM a uma tabela Delta no Lakehouse em segurança, começando por um DRY RUN antes de apagar seja o que for.
Pré-requisitos
- Um workspace do Microsoft Fabric com uma capacidade ativa.
- Um Lakehouse com, pelo menos, uma tabela Delta onde já tenhas feito operações como
UPDATE,DELETE,MERGEouOPTIMIZE. - Um notebook do Fabric associado a esse Lakehouse para correr Spark SQL ou PySpark.
- Conhecimentos básicos de SQL.
Passo 1: Perceber porque existem ficheiros a mais
Sempre que fazes um UPDATE, DELETE, MERGE ou OPTIMIZE, o Delta não altera os ficheiros existentes: escreve ficheiros Parquet novos e marca os antigos como removidos no registo de transações. Os ficheiros antigos ficam fisicamente guardados para que o time travel continue a funcionar. Com o tempo, acumulam-se e aumentam o custo de armazenamento, mesmo que a tabela tenha poucas linhas.
É esta acumulação que o VACUUM resolve: remove os ficheiros que já não são referenciados pela versão atual e que são mais antigos do que a janela de retenção.
Passo 2: Simular a limpeza com DRY RUN
Antes de apagar seja o que for, usa a opção DRY RUN. Ela mostra a lista de ficheiros que seriam removidos, sem os apagar. É a forma mais segura de perceber o impacto do comando.
-- Lista os ficheiros que seriam removidos, sem apagar nada
VACUUM vendas RETAIN 168 HOURS DRY RUN
Substitui vendas pelo nome da tua tabela. Se a lista vier vazia, não há ficheiros suficientemente antigos para limpar — e isso é perfeitamente normal.
Passo 3: Executar o VACUUM com a retenção padrão
Quando estiveres à vontade com o resultado do DRY RUN, corre o VACUUM sem essa opção. Sem indicares um intervalo, o Delta usa a retenção padrão de sete dias (168 horas), ou seja, mantém tudo o que possa ser necessário para ler versões da última semana.
-- Remove ficheiros com mais de 7 dias que já não são referenciados
VACUUM vendas
O comando devolve o caminho da tabela e limpa os ficheiros elegíveis. É seguro corrê-lo várias vezes: se não houver nada a remover, não faz nada.
Passo 4: Reduzir a janela de retenção (com cuidado)
Por vezes queres recuperar espaço mais depressa e reduzir a retenção para menos de sete dias. O Delta tem uma verificação de segurança que impede isto por omissão, porque apagar ficheiros recentes pode partir o time travel e afetar leituras em curso. Só deves desativá-la se compreenderes o impacto.
-- Usar apenas quando percebes o efeito no time travel
SET spark.databricks.delta.retentionDurationCheck.enabled = false;
VACUUM vendas RETAIN 24 HOURS;
Aviso: nunca uses RETAIN 0 HOURS numa tabela com escritas simultâneas — podes apagar ficheiros ainda em uso e perder dados. Em produção, mantém a retenção padrão sempre que possível.
Passo 5: Alternativa em PySpark
Se preferes trabalhar em Python, a API DeltaTable faz o mesmo que o comando SQL. É útil quando queres integrar a limpeza num notebook de manutenção já existente.
from delta.tables import DeltaTable
dt = DeltaTable.forName(spark, "vendas")
dt.vacuum() # retenção padrão de 168 horas
# dt.vacuum(168) # o mesmo, mas explícito em horas
Verificar o resultado
Para confirmar que o VACUUM correu, consulta o histórico da tabela. Vais ver operações VACUUM START e VACUUM END registadas com a data e a hora.
DESCRIBE HISTORY vendas
Podes também reparar que o espaço ocupado pela pasta da tabela no OneLake diminuiu. Se tentares fazer time travel para uma versão mais antiga do que a retenção definida, essa leitura vai falhar — o que é o comportamento esperado depois de limpar os ficheiros.
Conclusão
O VACUUM é a peça final de uma boa rotina de manutenção: primeiro compactas os ficheiros com OPTIMIZE e depois recuperas espaço com o VACUUM. No Fabric podes correr estes comandos manualmente num notebook ou usar a funcionalidade de manutenção de tabelas do próprio Lakehouse para os agendar. Começa com a retenção padrão, observa o histórico durante algumas semanas e só depois pondera ajustar a janela. Qual é a tabela do teu Lakehouse que mais tem crescido — e sabes há quanto tempo não passa por um VACUUM?