Compartilhar via


Compactando tabelas Delta

Os arquivos de tabela delta ficam fragmentados ao longo do tempo. A fragmentação aumenta a sobrecarga de operação de arquivo, reduz a eficiência da compactação e pode limitar o paralelismo do leitor. A compactação reescreve muitos arquivos pequenos em menos arquivos de tamanho certo para que o Spark possa ler e processar dados com mais eficiência.

O OPTIMIZE comando é a operação de compactação primária. Ele agrupa pequenos arquivos em compartimentos visando um tamanho de arquivo ideal e, em seguida, os reescreve para o armazenamento.

Para obter diretrizes para cargas de trabalho cruzadas sobre estratégias de compactação no SQL Analytics Endpoint, no Power BI Direct Lake e no Spark, consulte manutenção e otimização de tabelas para cargas de trabalho cruzadas.

Métodos de compactação

Microsoft Fabric oferece várias abordagens para manter os tamanhos de arquivo ideais nas tabelas Delta:

OPTIMIZE comando

O OPTIMIZE comando é a operação fundamental para compactar tabelas Delta. Ele reescreve arquivos pequenos em arquivos maiores para melhorar o layout de dados nas tabelas Delta.

OPTIMIZE dbo.table_name
Propriedade Description Valor padrão Configuração de sessão
minFileSize Arquivos menores que esse limite são agrupados e reescritos como arquivos maiores. 1073741824 (1g) spark.databricks.delta.optimize.minFileSize
maxFileSize Tamanho do arquivo de destino produzido pelo OPTIMIZE comando. 1073741824 (1g) spark.databricks.delta.optimize.maxFileSize

OPTIMIZE é idempotente, mas um minFileSize excessivamente grande pode aumentar a amplificação de gravação. Por exemplo, com minFileSize definido para 1 GB, um arquivo de 900 MB pode ser reescrito depois de uma pequena gravação adicional. Para obter diretrizes automáticas de gerenciamento de tamanho de arquivo, consulte o tamanho do arquivo de destino adaptável.

OPTIMIZE com o Z-Order

Quando você usa a ZORDER BY cláusula, OPTIMIZE reescreve arquivos ativos para que linhas com valores semelhantes sejam colocadas nos mesmos arquivos. Isso melhora a exclusão de arquivos para filtros seletivos. Use o Z-Order quando:

  • Suas consultas frequentemente filtram em duas ou mais colunas juntas (por exemplo, data + customer_id) e
  • Esses predicados são seletivos o suficiente para que o salto em nível de arquivo reduz o número de arquivos verificados.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE com ordem V

A cláusula VORDER resulta em que os arquivos destinados à compactação tenham a otimização V-Order aplicada. Para obter mais informações sobre o V-Order, consulte a documentação detalhada.

OPTIMIZE dbo.table_name VORDER

OPTIMIZE com clustering líquido

O clustering líquido é especificado como uma opção de tabela; consulte habilitar o clustering líquido para obter detalhes. Quando o "liquid clustering" está habilitado, OPTIMIZE executa a reescrita física que implementa a política de "liquid clustering".

Importante

Os dados só são clusterizados quando OPTIMIZE é executado em tabelas com clusterização líquida habilitada. As operações de gravação regulares NÃO clusterizam os dados. Ter uma estratégia de compactação, como usar a compactação automática ou agendar manualmente trabalhos de otimização, é essencial para garantir que os benefícios dos dados clusterizados (ou seja, o salto de arquivo Delta aprimorado) possam ser realizados.

Otimização rápida

A otimização rápida analisa de forma inteligente os arquivos de tabela Delta e ignora as operações de compactação que provavelmente não melhorarão o desempenho de forma significativa.

Em vez de compactar arquivos cegamente sempre que há arquivos pequenos, a otimização rápida avalia se cada compartimento candidato (grupo de arquivos pequenos) atende às metas de compactação de prática recomendada configuráveis. O Fast Optimize só executa a compactação em um compartimento de arquivos se a mesclagem deles provavelmente atingirá seu tamanho mínimo de destino ou se houver muitos arquivos pequenos. Caso contrário, ele ignora esse grupo ou reduz quantos arquivos ele compacta.

SET spark.microsoft.delta.optimize.fast.enabled = TRUE

A otimização rápida pode ser ajustada com base nas expectativas de compactação:

Propriedade Description Valor padrão Configuração de sessão
minNumFiles O número de arquivos pequenos que precisam existir em um agrupamento para que a otimização seja executada, caso o agrupamento não contenha dados suficientes estimados para produzir um arquivo compactado. 50 spark.microsoft.delta.optimize.fast.minNumFiles
parquetCoefficient Multiplicado pelo tamanho mínimo de arquivo no contexto otimizado para determinar a quantidade mínima de pequenos dados de arquivo que devem existir em um receptáculo para que ele seja incluído no escopo da compactação. 1.3 spark.microsoft.delta.optimize.fast.parquetCoefficient

Observação

Os parquetCoefficient resulta em o tamanho de destino de uma partição ser maior do que o tamanho mínimo de destino do contexto de otimização. Esse coeficiente considera que a combinação de vários pequenos arquivos parquet resulta em melhor compactação e, assim, em menos dados do que a soma dos pequenos arquivos. Esse valor pode ser aumentado para ser mais conservador na frequência com que a otimização rápida ignorará compartimentos ou diminuirá para permitir saltos de compartimento mais permissivos.

Como funciona

A otimização rápida introduz verificações extras antes que as lixeiras sejam compactadas. Para cada compartimento candidato, o "fast optimize" avalia:

  • A quantidade estimada de dados brutos no compartimento (soma de tamanhos de arquivo pequenos)
  • Se a combinação dos arquivos pequenos é estimada para produzir um arquivo que atende ao tamanho mínimo de destino configurado
  • Se o compartimento contém pelo menos o número mínimo configurado de arquivos pequenos

A otimização rápida avalia cada compartimento de arquivos pequenos e compacta apenas os arquivos pequenos que provavelmente atingirão o tamanho mínimo de destino ou excederão a contagem mínima de arquivos. As lixeiras que não atendem a esses limites são ignoradas ou parcialmente compactadas. Ignorar bins subótimos reduz regravações desnecessárias, diminui a amplificação de gravação e torna os trabalhos "OPTIMIZE" mais idempotentes.

Captura de tela mostrando a velocidade com que a otimização é avaliada se uma lixeira está compactada.

Observação

A implementação exata está sujeita a evoluir ao longo do tempo.

A otimização rápida pode reduzir os dados reescritos em um ciclo de vida da tabela Delta. Conforme mostrado no diagrama a seguir, a otimização rápida ignora bins subótimos, resultando em trabalhos OPTIMIZE mais rápidos e idempotentes com menos amplificação de gravação.

Captura de tela mostrando a rapidez com que a otimização resulta em menos reescrita de dados ao longo do tempo.

Observação

Somente para fins ilustrativos, os diagramas acima pressupõem que o tamanho do arquivo gravado da compactação é a soma do tamanho dos arquivos pequenos. Também implica um parquetCoefficient de 1.

Limitações
  • Não aplicável ao agrupamento líquido e às operações Z-Order
  • A otimização rápida não modifica o comportamento da compactação automática

Objetivos de compactação no nível do arquivo

Para evitar a reescrita de dados que antes eram considerados compactados (grandes o suficiente) com base na alteração dos destinos de tamanho de arquivo mínimo e máximo de compactação, spark.microsoft.delta.optimize.fileLevelTarget.enabled pode ser habilitado para impedir a recompilação de arquivos já compactados. Quando habilitado, os arquivos não serão recompactados se anteriormente já tiverem atendido pelo menos a metade do tamanho-alvo no momento da compactação. A manutenção de alvos no nível de arquivo minimiza a amplificação de gravação à medida que o tamanho do arquivo alvo de compactação é alterado ao longo do tempo (por exemplo, ao avaliar e definir um tamanho de arquivo maior a partir de um tamanho de arquivo alvo adaptável). Se estiver habilitada, a marca OPTIMIZE_TARGET_SIZE será adicionada a novos arquivos quando OPTIMIZE for executado ou em qualquer operação de gravação, se a propriedade delta.targetFileSize ou a propriedade da tabela delta.targetFileSize.adaptive estiver definida.

Observação

Embora não esteja habilitada por padrão, a Microsoft recomenda habilitar destinos de compactação no nível do arquivo para limitar a potencial amplificação de gravação.

SET spark.microsoft.delta.optimize.fileLevelTarget.enabled = TRUE

Compactação automática

A compactação automática avalia a integridade da partição após cada operação de gravação. Quando detecta fragmentação excessiva de arquivo (muitos arquivos pequenos) dentro de uma partição, ela dispara uma operação síncrona OPTIMIZE imediatamente após a gravação ser confirmada. Essa abordagem orientada pelo autor para a manutenção de arquivos é ideal porque a compactação só é executada quando determinada programaticamente que seja benéfica.

Habilitar no nível da sessão

Defina spark.databricks.delta.autoCompact.enabled no nível da sessão para habilitar a compactação automática para novas tabelas criadas nessa sessão do Spark:

SET spark.databricks.delta.autoCompact.enabled = TRUE

Habilitar no nível da tabela

Defina a propriedade delta.autoOptimize.autoCompact da tabela para habilitar a compactação automática para tabelas específicas:

CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Use a opção delta.autoOptimize.autoCompact do DataFrameWriter para habilitar a compactação automática ao criar uma tabela:

df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')

Habilite a mesma propriedade de tabela em uma tabela existente:

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Ajustar os limites de compactação automática

Ajuste o comportamento de compactação automática definindo estas configurações de sessão do Spark:

Propriedade Description Valor padrão Configuração de sessão
maxFileSize O tamanho máximo do arquivo de destino em bytes para arquivos compactados. 134217728b (128 MB) spark.databricks.delta.autoCompact.maxFileSize
minFileSize O tamanho mínimo do arquivo em bytes para um arquivo a ser considerado compactado. Qualquer coisa abaixo desse limite é considerada para compactação e contada em relação ao limite de minNumFiles. Não definido por padrão, calculado como 1/2 do maxFileSize a menos que você defina explicitamente um valor. spark.databricks.delta.autoCompact.minFileSize
minNumFiles O número mínimo de arquivos que devem existir abaixo do minFileSize limite para que a compactação automática seja disparada. 50 spark.databricks.delta.autoCompact.minNumFiles

Escolha entre compactação automática e otimização agendada

A Microsoft recomenda a compactação automática como estratégia padrão para a maioria das cargas de trabalho de ingestão. Geralmente, ele supera os agendamentos fixos e reduz a sobrecarga operacional da manutenção OPTIMIZE de trabalhos.

Se seus objetivos de latência forem estritos, o agendamento OPTIMIZE em um pool do Spark separado poderá ser melhor porque a compactação automática é executada de forma síncrona após as gravações.

Use a compactação junto com recursos de prevenção de arquivos pequenos, como otimizar a gravação. Para obter diretrizes, consulte Otimizar gravação.

Manutenção de tabelas do lakehouse

Você pode executar operações de manutenção ad hoc, como OPTIMIZE do Lakehouse Explorer. Para obter mais informações, consulte a manutenção da tabela Lakehouse.

Resumo de práticas recomendadas

Use essas recomendações para equilibrar o custo de gravação, o desempenho de leitura e a sobrecarga de manutenção para a compactação de tabela Delta.

  • Ativar Compactação Automática para pipelines de ingestão com frequentes gravações pequenas (streaming ou microbatch) para reduzir o agendamento manual.
  • Use a compactação automática seletivamente para outros padrões de gravação quando seus objetivos de nível de serviço podem tolerar picos ocasionais de latência de gravação.
  • Agende a tabela completa OPTIMIZE durante janelas silenciosas quando precisar reescrever muitas partições ou aplicar Z-Order.
  • Ative a otimização rápida para reduzir a amplificação de escrita e tornar OPTIMIZE mais idempotente.
  • Habilite os destinos de compactação no nível do arquivo para reduzir a recompação desnecessária à medida que os tamanhos de arquivo de destino aumentam ao longo do tempo.
  • Use a gravação otimizada em caminhos de ingestão adequados porque a compactação de pré-gravação geralmente é menos dispendiosa do que a compactação pós-gravação. Para obter diretrizes, consulte Otimizar gravação.