Como otimizar tabelas Delta no Lakehouse: passo a passo
Com o tempo, uma tabela Delta num Lakehouse acumula muitos ficheiros Parquet pequenos, resultado de cargas e atualizações frequentes. Muitos ficheiros pequenos tornam as leituras lentas e desperdiçam recursos de computação. Otimizar tabelas Delta num Lakehouse com o comando OPTIMIZE compacta esses ficheiros e, em conjunto com o VACUUM, remove os ficheiros antigos que já não são precisos — mantendo as tuas consultas rápidas.
Pré-requisitos
- Um workspace no Microsoft Fabric com capacidade ativa (versão de avaliação ou paga).
- Um Lakehouse já criado, com pelo menos uma tabela Delta (por exemplo, carregada a partir de um CSV).
- Permissões para executar tarefas de manutenção nesse Lakehouse.
- Noções básicas de Spark SQL, apenas se optares pelo caminho com notebook.
Passo 1: Perceber quando otimizar
O problema mais comum tem um nome: "small files". Cada carga de dados pode criar dezenas de ficheiros Parquet pequenos e, quando o motor lê a tabela, tem de abrir todos esses ficheiros — o que é lento. O comando OPTIMIZE resolve isto ao juntar muitos ficheiros pequenos em poucos ficheiros grandes. A opção V-Order vai mais longe: ordena, codifica e comprime os dados para que motores como o Power BI em Direct Lake e o SQL analytics endpoint façam leituras mais rápidas. Uma boa regra prática é correr a manutenção depois de cargas ou atualizações grandes, ou quando notares que as consultas ficaram mais lentas.
Passo 2: Correr OPTIMIZE e V-Order pela interface
A forma mais simples não exige código. Abre o teu Lakehouse e vai ao separador que mostra as tabelas. Passa o rato sobre a tabela que queres otimizar, clica nos três pontos (…) e escolhe Maintenance. Na janela que aparece, configura o seguinte:
- Ativa Run OPTIMIZE command now para compactar os ficheiros.
- Marca a caixa Apply V-Order se quiseres o ganho extra de leitura. O V-Order tem cerca de 15% de impacto no tempo de escrita, mas pode dar até 50% mais compressão.
- Se quiseres limpar já os ficheiros antigos, ativa também o VACUUM e confirma o limite de retenção.
- Clica em Run now.
O Fabric lança um trabalho Spark em segundo plano. Podes fechar a janela e acompanhar o progresso no monitor de execuções.
Passo 3: Alternativa em notebook com Spark SQL
Se preferes automatizar, consegues fazer o mesmo num notebook ligado ao Lakehouse. Cria um notebook, confirma que o Lakehouse está anexado no painel da esquerda e executa uma célula de SQL. Substitui vendas pelo nome da tua tabela:
%%sql
OPTIMIZE vendas;
Este comando compacta os ficheiros pequenos da tabela. Em tabelas com muitas escritas, correr o OPTIMIZE com regularidade evita a degradação do desempenho ao longo do tempo.
Dica: não otimizes por otimizar. Em tabelas pequenas ou raramente escritas, correr o OPTIMIZE com demasiada frequência não traz ganhos visíveis e gasta computação à toa.
Passo 4: Limpar ficheiros antigos com VACUUM
O OPTIMIZE cria ficheiros novos, mas os antigos continuam a existir para suportar o time travel do Delta Lake. Para libertar espaço, o VACUUM remove os ficheiros que já não são referenciados e que ultrapassaram o período de retenção. O valor por omissão é de sete dias. Numa célula do notebook:
%%sql
VACUUM vendas RETAIN 168 HOURS;
168 horas correspondem a sete dias. Não definas um valor inferior a sete dias sem perceberes o impacto: podes partir o time travel e afetar leituras em curso. A ordem recomendada é simples — corre primeiro o OPTIMIZE e só depois o VACUUM.
Verificar o resultado
Para confirmar que a otimização funcionou, verifica quantos ficheiros a tabela tem agora. Num notebook, executa:
%%sql
DESCRIBE DETAIL vendas;
Repara na coluna numFiles: depois do OPTIMIZE deve ser bastante menor do que antes, enquanto o sizeInBytes reflete ficheiros maiores e mais eficientes. Na prática, vais notar consultas e relatórios mais rápidos. Podes ainda confirmar no monitor do Fabric que o trabalho Spark terminou com sucesso.
Conclusão
Com OPTIMIZE, V-Order e VACUUM tens tudo o que precisas para manter as tabelas Delta do teu Lakehouse rápidas e arrumadas. O passo seguinte é tornar isto automático: usa a atividade Lakehouse Maintenance numa pipeline do Data Factory ou agenda um notebook para correr depois das cargas maiores. Com que frequência achas que as tuas tabelas mais movimentadas precisam de manutenção — diária, semanal, ou só depois de grandes cargas?