Pular para o conteúdo principal

Otimizar a disposição do arquivo de dados

O comando OPTIMIZE reescreve arquivos de dados para melhorar a disposição dos dados para tabelas Delta Lake e Apache Iceberg. Para tabelas com clustering líquido ativado, OPTIMIZE reescreve os arquivos de dados para agrupar dados pelas chaves de clustering líquido. Para tabelas com partições definidas, a compactação de arquivos e a disposição dos dados são realizadas dentro das partições.

A otimização preditiva executa automaticamente OPTIMIZE para tabelas gerenciadas do Unity Catalog. Databricks recomenda habilitar a otimização preditiva para todas as tabelas gerenciadas pelo Unity Catalog para simplificar a manutenção de dados e reduzir os custos de armazenamento. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.

As tabelas do Delta Lake sem clusters líquidos podem, opcionalmente, incluir uma cláusula ZORDER BY para melhorar o clusters de dados na reescrita. As tabelas Apache Iceberg usam estratégias de clusters e classificação em vez de ZORDER. O Databricks recomenda o uso de clusters líquidos em vez de partições, ZORDER, ou outras abordagens de disposição de dados.

See OPTIMIZE.

importante

No Databricks Runtime 16.0 e acima, é possível usar OPTIMIZE FULL para forçar o reclustering para tabelas com clustering líquido habilitado. Consultar Forçar reagrupamento.

Exemplos de sintaxe

Acionar a compactação executando o comando OPTIMIZE:

SQL
OPTIMIZE table_name

Se você tiver uma grande quantidade de dados e quiser otimizar apenas um subconjunto deles, especifique um predicado de partição opcional usando WHERE:

SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'

Considere a seguinte informação para bin-packing:

  • A otimização de bin-packing é *idempotente*, o que significa que se for executado duas vezes no mesmo dataset, a segunda execução não tem efeito.
  • O bin-packing visa produzir arquivos de dados uniformemente equilibrados em relação ao seu tamanho no armazenamento, mas não necessariamente pelo número de tuplas por arquivo. No entanto, as duas medidas são frequentemente correlacionadas.

Leitores de tabelas Delta Lake usam isolamento Snapshot, o que significa que eles não são interrompidos quando OPTIMIZE remove arquivos desnecessários do log de transações. Como OPTIMIZE não faz alterações de dados na tabela, uma leitura antes e depois de um OPTIMIZE tem os mesmos resultados. Realizar OPTIMIZE em uma tabela que é uma fonte de transmissão não afeta nenhuma transmissão atual ou futura com esta tabela como fonte.

OPTIMIZE retorna as estatísticas do arquivo (mínimo, máximo, total e assim por diante) para os arquivos removidos e os arquivos adicionados pela operação. As estatísticas de otimização também contêm as estatísticas de Z-ordering, o número de lotes e as partições otimizadas.

Você também pode compactar arquivos pequenos automaticamente usando a compactação automática. Consulte Compactação automática.

Frequência recomendada para execução OPTIMIZE

Habilitar a otimização preditiva para tabelas gerenciadas do Unity Catalog para garantir que OPTIMIZE seja executado automaticamente quando for economicamente viável.

Ao escolher a frequência de execução de OPTIMIZE, há uma compensação entre desempenho e custo. Para melhor desempenho da consulta do usuário final, execute OPTIMIZE com mais frequência. Isso acarretará um custo mais elevado devido ao maior uso de recursos. Para otimizar custos, execute-o com menos frequência.

O Databricks recomenda que você comece executando OPTIMIZE diariamente, de preferência à noite, quando os preços spot são baixos, e depois ajuste a frequência para equilibrar o custo e as compensações de desempenho.

Tipos de instância recomendados para OPTIMIZE

Ambas as operações exigem muito da CPU, realizando grandes quantidades de decodificação e codificação Parquet.

Databricks recomenda tipos de instância otimizados para compute. OPTIMIZE também se beneficia de SSDs anexados.