Compartilhar via


Ajustar o tamanho dos arquivos de dados da tabela Delta

Arquivos de tamanho apropriado são importantes para o desempenho da consulta, a utilização de recursos e o gerenciamento de metadados. Arquivos menores aumentam a sobrecarga da tarefa e as operações de metadados, enquanto arquivos maiores podem subutilizar o paralelismo e distorcer a E/S. O Delta Lake usa metadados de arquivo para a poda de partição e o salto de dados, portanto, direcionar o tamanho correto do arquivo garante leituras, gravações e manutenção eficientes.

A seção a seguir mostra como usar vários recursos de ajuste de tamanho de arquivo diferentes para obter desempenho para suas tabelas Delta.

Operações de layout de dados ajustáveis

Optimize

O OPTIMIZE comando reescreve arquivos pequenos como arquivos maiores para melhorar o layout dos dados nas tabelas Delta. Para obter mais detalhes, incluindo informações de ajuste de tamanho de arquivo, examine a documentação do comando OPTIMIZE .

Compactação automática

A Compactação Automática avalia automaticamente 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 escritor para a manutenção de arquivos geralmente é ideal porque a compactação só é executada quando determinada programaticamente como vantajosa. Para obter opções de configuração detalhadas e informações adicionais, consulte a documentação de compactação automática .

Otimizar gravação

A otimização da gravação reduz a sobrecarga de pequenos arquivos ao executar a compacção antes da gravação (empacotamento em blocos), o que gera menos arquivos, porém maiores. Essa abordagem organiza os dados na memória em compartimentos de tamanho ideal antes que o Spark grave os arquivos Parquet, maximizando o potencial de gerar arquivos de tamanho adequado sem a necessidade de operações imediatas de limpeza após a gravação.

A otimização da operação de gravação deve ser usada com cuidado, pois o custo computacional de embaralhar dados pode adicionar tempo de processamento excessivo e desnecessário a determinados cenários de gravação. A otimização da gravação é benéfica quando uma operação de gravação produziria arquivos pequenos que seriam candidatos à compactação posteriormente.

Captura de tela mostrando como a otimização da gravação resulta em menos arquivos sendo gravados.

A otimização da gravação geralmente é benéfica para:

  • Tabelas particionadas
  • Tabelas com pequenas inserções frequentes
  • Operações que provavelmente tocarão em muitos arquivos (MERGEUPDATEeDELETE)

Para a aplicação seletiva em tabelas específicas, desative a configuração da sessão e ative a propriedade da tabela individualmente. Desativar a configuração no nível da sessão permite que as sessões do Spark deleguem a cada tabela a decisão de aplicar a otimização da gravação.

  1. Desativar otimização de gravação

    spark.conf.unset("spark.databricks.delta.optimizeWrite.enabled")
    
  2. Habilitar na tabela individual

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

Para habilitar as gravações em todas as tabelas particionadas na sessão do Spark, verifique se a configuração da sessão está desconfigurada e, em seguida, habilite a configuração spark.microsoft.delta.optimizeWrite.partitioned.enabled da sessão.

SET spark.microsoft.delta.optimizeWrite.partitioned.enabled = TRUE

O tamanho do arquivo de destino gerado pela gravação otimizada pode ser ajustado por meio da configuração spark.databricks.delta.optimizeWrite.binSize.

Observação

Consulte os perfis de recurso para configurações padrão de gravação otimizada por perfil de recurso.

Definindo consistentemente o tamanho do arquivo de destino

Para evitar a necessidade de definir a configuração de tamanho mínimo e máximo do arquivo de destino para otimizar, compactar automaticamente e otimizar a gravação, o Microsoft Fabric oferece a propriedade delta.targetFileSize da tabela como um meio de unificar todas as configurações de layout de dados no nível da tabela. O valor do tamanho do arquivo de destino é inserido como uma cadeia de caracteres de bytes (por exemplo, 1073741824b, , 1048576k, 1024m, 1g). Quando especificado, ele tem precedência sobre todas as outras configurações de sessão e o tamanho do arquivo de destino adaptável.

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.targetFileSize' = '256m')

Tamanho do arquivo de destino adaptável

Microsoft Fabric fornece tamanho de arquivo de destino adaptável para eliminar a complexidade associada ao ajuste manual do tamanho do arquivo de destino de todas as tabelas em uma sessão ou tabelas individuais por meio da propriedade de tabela delta.targetFileSize. O tamanho do arquivo de destino adaptável usa a heurística da tabela Delta, como o tamanho da tabela, para estimar o tamanho ideal do arquivo de destino e atualiza automaticamente o destino à medida que as condições mudam, garantindo um desempenho ideal sem intervenção manual ou sobrecarga de manutenção.

Observação

Embora não esteja habilitada por padrão, a Microsoft recomenda habilitar a configuração de sessão tamanho de arquivo alvo adaptável.

Habilite o tamanho do arquivo de destino adaptável em tabelas criadas ou modificadas em uma sessão do Spark definindo a seguinte configuração de sessão do Spark:

SET spark.microsoft.delta.targetFileSize.adaptive.enabled = TRUE

Quando habilitado, o tamanho do arquivo de destino adaptável é avaliado e definido nos seguintes cenários:

  • operações de CREATE TABLE AS SELECT e CREATE OR REPLACE TABLE AS SELECT
  • Sobrescrever gravações (por exemplo, DataFrame.write.mode("overwrite") ou INSERT OVERWRITE)
  • Grava no modo ErrorIfExists, Append ou Ignore ao criar uma nova tabela
  • No início do comando OPTIMIZE

Uma vez definido, o tamanho ideal continua a ser reavaliado no início de cada OPTIMIZE operação para garantir que a heurística atual reflita a distribuição de dados mais recente e o crescimento da tabela. Essa abordagem adaptável atualiza automaticamente o tamanho do arquivo de destino ao longo do tempo, removendo a necessidade de ajuste manual, preservando o desempenho de consulta e gravação à medida que os dados aumentam. Ao precisar fixar um tamanho específico, como em casos de uso de hipersintonização ou teste, você pode substituir o ajuste adaptável definindo explicitamente a propriedade de tabela definida pelo usuário delta.targetFileSize.

O valor do tamanho do arquivo de destino adaptável avaliado pode ser auditado executando DESCRIBE DETAIL ou DESCRIBE EXTENDED na tabela. O tamanho avaliado adaptável é armazenado como uma cadeia de caracteres de bytes na propriedade delta.targetFileSize.adaptiveda tabela. Esse valor é usado como a configuração de tamanho máximo ou de destino para otimização, compactação automática e otimização de gravação. O valor mínimo usado pelas configurações relacionadas é computado como metade de delta.targetFileSize.adaptive.

O tamanho do arquivo de destino adaptável pode ser configurado ainda mais por meio das seguintes configurações de sessão do Spark:

Propriedade Description Valor Padrão Configuração da Sessão
minFileSize Especifica o tamanho mínimo do arquivo (limite inferior) como uma sequência de bytes que o Tamanho do Arquivo de Destino Adaptável usa durante a avaliação. Deve ter entre 128 MB e 1 GB. 128m spark.microsoft.delta.targetFileSize.adaptive.minFileSize
maxFileSize Especifica o tamanho máximo do arquivo (limite superior) como uma string de bytes que o Tamanho do Arquivo de Destino Adaptável usa quando é avaliado. Deve ter entre 128 MB e 1 GB. 1024m spark.microsoft.delta.targetFileSize.adaptive.maxFileSize
stopAtMaxSize Quando true, interrompe avaliações de tamanho adicional depois que o tamanho do arquivo de destino computado atinge o maxFileSize, reduzindo qualquer sobrecarga de avaliação em tabelas muito grandes. true spark.microsoft.delta.targetFileSize.adaptive.stopAtMaxSize

Observação

Com stopAtMaxSize habilitado (o padrão), o tamanho de destino adaptável permanece fixo no valor máximo uma vez atingido, evitando cálculos extras. Se suas tabelas puderem diminuir após o crescimento, defina essa propriedade para false para permitir o recálculo abaixo do limite máximo.

O gráfico a seguir ilustra a relação entre o tamanho da tabela e o tamanho ideal do arquivo Parquet. Para tabelas abaixo de 10 GB, o Fabric Spark Runtime avalia o tamanho do arquivo de destino como 128 MB. À medida que o tamanho da tabela aumenta, o tamanho do arquivo de destino é dimensionado linearmente, atingindo até 1 GB para tabelas que excedem 10 TB.

Gráfico ilustrando a relação entre o tamanho da tabela e o tamanho ideal do arquivo parquet.

Começar pequeno em 128 MB e, em seguida, dimensionar o tamanho dos arquivos parquet à medida que uma tabela cresce de tamanho tem benefícios em cascata:

  • Pular arquivos Delta aprimorado: arquivos com tamanho adequado suportam agrupamento de dados e pular de forma ideal, permitindo que o protocolo de exclusão de arquivos da Delta elimine um maior número de arquivos irrelevantes durante a execução da consulta. Uma tabela pequena com arquivos de 128 MB em vez de arquivos de 1 GB permite ignorar 8x mais arquivos possíveis.

  • Redução dos custos de atualização: MERGE e UPDATE as operações reescrevem apenas os arquivos afetados. Arquivos de tamanho direito minimizam o número de arquivos tocados por operação, reduzindo a quantidade de dados reescritos. Com os Vetores de Exclusão habilitados, o dimensionamento adequado de arquivos torna-se crítico: os marcadores de exclusão no nível de linha em arquivos grandes resultam em custos de limpeza significativos durante operações de otimização ou limpeza.

  • Paralelismo otimizado: arquivos de tamanho direito permitem que o Spark alcance o paralelismo de tarefa ideal. Muitos arquivos pequenos sobrecarregam o agendador; poucos arquivos grandes demais subutilizam o pool do Spark. O dimensionamento ideal maximiza a taxa de transferência de leitura e gravação.

O tamanho do arquivo de destino adaptável pode melhorar o desempenho da compactação em 30 a 60% e fornecer consultas e gravações mais rápidas quando ele seleciona um tamanho de arquivo mais ideal do que o padrão. Se a avaliação adaptável produzir o mesmo tamanho que a configuração de sessão padrão do Spark, não haverá nenhuma melhoria de desempenho esperada.

Importante

Para evitar a amplificação de gravação, em que arquivos já compactados são reescritos quando o tamanho do arquivo de destino adaptável aumenta à medida que a tabela cresce, habilite os destinos de compactação no nível do arquivo. Esse recurso impede que os arquivos compactados em tamanhos de destino adaptáveis anteriores sejam compactados novamente desnecessariamente. Para obter mais informações, consulte a documentação sobre destinos de compactação no nível do arquivo.

Resumo de práticas recomendadas

  • Habilite a Compactação Automática para pipelines de ingestão que realizam frequentes escritas pequenas (streaming ou microlote), evitando o agendamento manual e mantendo os arquivos compactados automaticamente.
    • Para outros padrões de gravação, pode ser benéfico ativar como uma medida de precaução contra o acúmulo de arquivos pequenos. No entanto, é importante avaliar se seus objetivos de nível de serviço para processamento de dados toleram picos periódicos no tempo de processamento.
  • Habilite o tamanho do arquivo de destino adaptável para remover a adivinhação em torno dos tamanhos de arquivo de destino ideais.
  • Use Otimização de Gravação em caminhos de ingestão controlados (processos em lote que podem tolerar uma reordenação, cenários de particionamento ou gravações pequenas frequentes) para reduzir a criação de arquivos pequenos e custos de manutenção posteriores. A compactação de pré-gravação (otimização de gravação) tende a ser menos dispendiosa do que a compactação pós-gravação (otimização).
  • Agende operações de tabela OPTIMIZE completa durante janelas silenciosas quando você deve reescrever muitas partições ou executar o Z-Order.
  • Habilite a otimização rápida para minimizar a amplificação de gravação e tornar OPTIMIZE mais idempotente (consulte otimização rápida).
  • Use delta.targetFileSize ou, de preferência, o tamanho do arquivo de destino adaptável para manter os valores de tamanho do arquivo de destino consistentes entre recursos de layout de dados e sessões do Spark.
  • Habilite os destinos de compactação no nível do arquivo para evitar a amplificação de escrita, à medida que as tabelas aumentam de tamanho e passam a usar tamanhos de arquivo de destino maiores.