Pular para o conteúdo principal

Otimizar a disposição do arquivo de dados

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.

O comando OPTIMIZE reescreve arquivos de dados para melhorar a disposição dos dados para tabelas. 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.

Tabelas sem cluster líquido podem incluir opcionalmente uma cláusula ZORDER BY para melhorar o clustering de dados na reescrita. O Databricks recomenda usar clusters líquidos em vez de partições, ZORDER, ou outras abordagens de disposição de dados.

nota

ZORDER é uma otimização específica para o Delta Lake. Tabelas Apache Iceberg usam estratégias de agrupamento e ordenação em vez disso.

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'
nota
  • 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 balanceados em relação ao seu tamanho em disco, mas não necessariamente ao número de tuplas por arquivo. No entanto, na maioria das vezes, as duas medidas estão correlacionadas.
  • As APIs Python e Scala para executar a operação OPTIMIZE estão disponíveis no Databricks Runtime 11.3 LTS e acima.

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. OPTIMIZE não faz alterações relacionadas a dados na tabela, portanto, uma leitura antes e depois de um OPTIMIZE tem os mesmos resultados. Executar OPTIMIZE em uma tabela que é uma fonte de transmissão não afeta nenhuma transmissão atual ou futura que tratam esta tabela como uma fonte. OPTIMIZE retorna as estatísticas do arquivo (min, max, 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 partições otimizadas.

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

Com que frequência executar 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 com que frequência executar 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.

A Databricks recomenda que você comece executando OPTIMIZE diariamente (preferencialmente à noite, quando os preços spot estão baixos) e então ajuste a frequência para equilibrar as compensações entre custo e desempenho.

Qual é o melhor tipo de instância para execução 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.