Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
| 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.
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.
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.
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.
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:
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
OPTIMIZEdurante 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
OPTIMIZEmais 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.