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 (1 GB) | spark.databricks.delta.otimize.minFileSize |
| maxFileSize | Tamanho do OPTIMIZE arquivo de destino produzido pelo comando. |
1073741824 (1 GB) | 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 extra. 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. O esquema colocalizado melhora a capacidade de ignorar ficheiros com 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
Podes combinar a Ordem Z e a Ordem V num único comando. O Spark aplica as operações nesta ordem: compactação de bins → Ordem Z → Ordem V.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER
O comportamento da V-Order durante OPTIMIZE depende de como invocas o comando:
| Invocação | Comportamento |
|---|---|
OPTIMIZE table VORDER |
Impõe a V-Order nos ficheiros reescritos, independentemente das configurações da sessão ou da tabela. |
OPTIMIZE table (sem VORDER palavra-chave) |
Herda o comportamento V-Order de TBLPROPERTIES("delta.parquet.vorder.enabled") se estiver definida; caso contrário, recorre à configuração de sessão spark.sql.parquet.vorder.default. |
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. Aumente o valor para ser mais conservador quanto à frequência com que a otimização rápida ignora blocos, ou diminua o valor para permitir ignorar blocos de forma 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
A otimização rápida avalia cada bin de ficheiros pequenos e compacta apenas os bins que provavelmente atingirão o tamanho mínimo alvo ou ultrapassarão o número mínimo de ficheiros. 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')
Reduzir a sobrecarga de avaliação
A partir do runtime 2.0 do Fabric Spark (Delta 4.1), pode ativar o modo de autocompactação onCheckpointOnly. Por defeito, a autocompactação avalia os metadados dos ficheiros após cada operação de escrita para determinar se uma tabela tem demasiados ficheiros pequenos. Com onCheckpointOnly, a avaliação é adiada para operações de checkpointing log (tipicamente a cada 10 commits). No momento do checkpoint, o instantâneo da tabela já está totalmente reconstruído, pelo que a avaliação utiliza metadados que já se encontram em memória, em vez de exigir uma análise adicional. A avaliação diferida reduz a sobrecarga em cada commit, ao mesmo tempo que continua a garantir que as tabelas são compactadas periodicamente.