Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os ficheiros da tabela Delta tornam-se fragmentados ao longo do tempo. A fragmentação aumenta a sobrecarga de operação do ficheiro, reduz a eficiência de compressão e pode limitar o paralelismo entre leitores. A compactação reescreve muitos ficheiros pequenos em menos ficheiros do tamanho correto para que o Spark possa ler e processar dados de forma mais eficiente.
O OPTIMIZE comando é a principal operação de compactação. Agrupa ficheiros pequenos em pacotes que visam um tamanho ideal, e depois reescreve-os para o armazenamento.
Para orientações para cargas de trabalho cruzadas sobre estratégias de compactação no SQL Analytics Endpoint, Power BI Direct Lake e Spark, consulte Manutenção e otimização de tabelas de carga cruzadas.
Métodos de compactação
O Microsoft Fabric oferece várias abordagens para manter tamanhos ótimos de ficheiros em tabelas Delta:
OPTIMIZE comando
O OPTIMIZE comando é a operação fundamental para compactar tabelas Delta. Ele regrava arquivos pequenos em arquivos maiores para melhorar o layout de dados em tabelas Delta.
| Propriedade | Description | Valor predefinido | Configuração da sessão |
|---|---|---|---|
| minFileSize | Os arquivos menores que esse limite são agrupados e reescritos como arquivos maiores. | 1073741824 (1g) | spark.databricks.delta.otimize.minFileSize |
| maxFileSize | Tamanho do OPTIMIZE arquivo de destino produzido pelo comando. |
1073741824 (1g) | spark.databricks.delta.optimize.maxFileSize |
OPTIMIZE é idempotente, mas um sobredimensionado minFileSize pode aumentar a amplificação de escrita. Por exemplo, com minFileSize 1 GB definido, um ficheiro de 900 MB pode ser reescrito após uma pequena escrita adicional. Para orientações sobre gestão automática do tamanho do ficheiro, consulte o tamanho adaptativo do ficheiro-alvo.
OPTIMIZE com Z-Order
Quando utilizas a ZORDER BY cláusula, OPTIMIZE reescreve ficheiros ativos para que linhas com valores semelhantes fiquem co-localizadas nos mesmos ficheiros. Isto melhora o salto de ficheiros para filtros seletivos. Use Z-Order quando:
- Suas consultas freqüentemente filtram duas ou mais colunas juntas (por exemplo, data + customer_id) e
- Esses predicados são seletivos o suficiente para que o salto no nível do arquivo reduza o número de arquivos examinados.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)
OPTIMIZE com V-Order
A cláusula VORDER resulta em aplicar a otimização V-Order aos arquivos com escopo para compactação. Para obter mais informações sobre o V-Order, consulte a documentação detalhada.
OPTIMIZE dbo.table_name VORDER
OPTIMIZE com agrupamento de líquidos
O agrupamento em líquido é especificado como uma opção de tabela; Veja Ativar Clustering em Líquido para obter detalhes. Quando a clusterização líquida está ativada, OPTIMIZE realiza uma reescrita física que aplica a política de clusterização.
Importante
Os dados só são agrupados quando OPTIMIZE são executados em tabelas habilitadas para clusterização líquida. As operações regulares de gravação NÃO agrupam os dados. Ter uma estratégia de compactação, como usar a compactação automática ou agendar manualmente trabalhos de otimização, é fundamental para garantir que os benefícios dos dados clusterizados (ou seja, o aprimoramento na omissão de arquivos Delta) possam ser realizados.
Otimização rápida
O Fast Otimize analisa de forma inteligente arquivos de tabela Delta e ignora operações de compactação que provavelmente não melhorarão significativamente o desempenho.
Em vez de compactar arquivos cegamente sempre que existam arquivos pequenos, a função "fast optimize" avalia se cada bin (grupo de arquivos pequenos) candidato atende às metas de compactação configuráveis de acordo com as práticas recomendadas. O Fast Otimize só executa a compactação em um compartimento de arquivos se é provável que a mesclagem atinja seu tamanho mínimo de destino ou se houver muitos arquivos pequenos. Caso contrário, ignora esse grupo ou reduz o número de ficheiros compactados.
A otimização rápida pode ser ajustada com base nas suas expectativas de compactação:
| Propriedade | Description | Valor predefinido | Configuração da sessão |
|---|---|---|---|
| minNumFicheiros | O número de arquivos pequenos que precisam existir num contentor para que a otimização seja executada se o contentor não contiver dados suficientes, estimados para produzir um arquivo compactado. | 50 | spark.microsoft.delta.optimize.fast.minNumFiles |
| Coeficiente Parquet | Multiplicado pelo tamanho mínimo do arquivo de contexto otimizado para determinar a quantidade mínima de dados de arquivos pequenos que devem existir em um compartimento para que o compartimento seja incluído no escopo da compactação. | 1.3 | spark.microsoft.delta.optimize.fast.parquetCoefficient |
Observação
O parquetCoefficient resultado no tamanho de destino de um compartimento ser maior do que o tamanho mínimo de ficheiro de destino no contexto de otimização. Este coeficiente leva em consideração o fato de que a combinação de vários pequenos arquivos parquet resulta em melhor compressão e, portanto, 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 diminuído para permitir uma ignorância de compartimentos mais permissiva.
Como funciona
A otimização rápida introduz verificações extras antes que os compartimentos sejam compactados. Para cada caixa de candidato, o Fast Optimize avalia:
- A quantidade estimada de dados brutos no compartimento (soma de tamanhos de arquivo pequenos)
- Se a combinação de arquivos pequenos é estimada para produzir um arquivo que atenda ao tamanho mínimo de destino configurado
- Se o compartimento contém pelo menos o número mínimo configurado de arquivos pequenos
O Fast Otimize 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. Os compartimentos que não atendem a esses limites são ignorados ou parcialmente compactados. Evitar compartimentos abaixo do ideal reduz regravações desnecessárias, diminui a amplificação de escrita e torna os trabalhos OTIMIZAR mais idempotentes.
Observação
A implementação exata está sujeita a evoluir ao longo do tempo.
A otimização rápida pode reduzir dados reescritos ao longo do ciclo de vida de uma tabela Delta. Como mostrado no diagrama seguinte, a otimização rápida salta caixas subótimas, resultando em trabalhos mais rápidos e idempotentes OPTIMIZE com menor amplificação de escrita.
Observação
Apenas para fins de ilustração, os diagramas acima assumem que o tamanho do arquivo escrito a partir da compactação é a soma do tamanho de arquivos pequenos. Também implica um parquetCoefficient igual a 1.
Limitações
- Não aplicável a operações de agrupamento de líquidos e Z-Order
- A otimização rápida não modifica o comportamento da compactação automática
Objetivos de compactação ao nível de arquivo
Para evitar a regravação de dados que anteriormente eram considerados compactados (grandes o suficiente) com base na alteração dos destinos de tamanho mínimo e máximo de arquivo de compactação, spark.microsoft.delta.optimize.fileLevelTarget.enabled pode ser habilitado para evitar a recompactação de arquivos já compactados. Quando habilitado, os arquivos não são recompactados se anteriormente atingissem pelo menos metade do tamanho do arquivo de destino no momento da compactação. Manter os objetivos ao nível do arquivo minimiza a amplificação de escrita à medida que o tamanho do alvo de compactação muda ao longo do tempo (por exemplo, através da avaliação e definição de um tamanho de arquivo alvo mais adaptativo). Se ativada, a tag OPTIMIZE_TARGET_SIZE é adicionada a novos arquivos quando OTIMIZE é executado ou para qualquer operação de gravação se a propriedade delta.targetFileSize ou a tabela delta.targetFileSize.adaptive estiver definida.
Observação
Embora não esteja ativada por padrão, a Microsoft recomenda ativar destinos de compactação ao nível de 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 ele deteta fragmentação excessiva de arquivos (muitos arquivos pequenos) dentro de uma partição, ele dispara uma operação síncrona OPTIMIZE imediatamente após a gravação ser confirmada. Essa abordagem orientada por escritor para a manutenção de arquivos é ideal porque a compactação só é executada quando determinado programaticamente como benéfico.
Ativar ao nível da sessão
Definido spark.databricks.delta.autoCompact.enabled ao nível da sessão para permitir a autocompactação para novas tabelas criadas nessa sessão Spark:
Ativar ao nível da tabela
Defina a propriedade de tabela delta.autoOptimize.autoCompact para permitir a compactação automática para tabelas específicas.
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Use a opção DataFrameWriter delta.autoOptimize.autoCompact para ativar a autocompactação ao criar uma tabela:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Ative a mesma propriedade de tabela numa tabela existente:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Ajustar limiares de autocompactação
Ajuste o comportamento da autocompactação definindo estas configurações de sessão Spark:
| Propriedade | Description | Valor predefinido | Configuração da 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 em bytes para que um arquivo seja considerado compactado. Qualquer coisa abaixo deste limiar é considerada para compactação e incluída no cálculo do minNumFiles limiar. |
Unset por padrão, calculado como 1/2 de maxFileSize a menos que defina explicitamente um valor. |
spark.databricks.delta.autoCompact.minFileSize |
| minNumFicheiros | O número mínimo de arquivos que devem existir abaixo do limite para que a minFileSize compactação automática seja acionada. |
50 | spark.databricks.delta.autoCompact.minNumFicheiros |
Escolha entre compactação automática e OPTIMIZE programada
A Microsoft recomenda a autocompactação como estratégia padrão para a maioria das cargas de trabalho de ingestão. Normalmente, supera as agendas fixas e reduz a sobrecarga operacional das tarefas de manutenção OPTIMIZE.
Se os seus objetivos de latência forem rigorosos, agendar OPTIMIZE num pool do Spark separado pode ser mais adequado porque a compactação automática é executada de forma síncrona após as gravações.
Utilize a compactação juntamente com funcionalidades que evitam ficheiros pequenos, como otimizar a escrita. Para orientações, veja Otimizar escrita.
Manutenção de tabelas Lakehouse
Pode realizar operações de manutenção ad hoc, como OPTIMIZE, a partir do Lakehouse Explorer. Para mais informações, consulte Manutenção das tabelas Lakehouse.
Resumo das melhores práticas
Use estas recomendações para equilibrar o custo de escrita, desempenho de leitura e sobrecarga de manutenção para a compactação da tabela Delta.
- Ative a compactação automática para os pipelines de ingestão com frequentes pequenas escritas (streaming ou microbatch) para reduzir o planeamento manual.
- Use a autocompactação seletivamente para outros padrões de escrita quando os seus objetivos de nível de serviço tolerarem picos ocasionais de latência de escrita.
-
Agende a totalidade da tabela
OPTIMIZEdurante janelas silenciosas, quando precisar de reescrever muitas partições ou aplicar o Z-Order. -
Permitir otimização rápida para reduzir a amplificação de escrita e tornar
OPTIMIZEmais idempotente. - Permitir alvos de compactação ao nível do ficheiro para reduzir a recompoção desnecessária à medida que os tamanhos alvo dos ficheiros aumentam ao longo do tempo.
- Utilize escrita otimizada em caminhos de ingestão adequados porque a compactação antes da escrita é frequentemente menos dispendiosa do que após a escrita. Para orientações, veja Otimizar escrita.