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.
Assim como sistemas de arquivos e bancos de dados relacionais, os dados ficam fragmentados ao longo do tempo, a menos que sejam gerenciados de perto, levando a custos excessivos de computação para ler os dados. Delta Lake não é uma exceção. Os arquivos de dados devem ser reescritos periodicamente em um layout ideal para reduzir os custos individuais de operação de arquivo, melhorar a compactação de dados e otimizar o paralelismo do leitor. O OPTIMIZE comando resolve esse desafio: ele agrupa pequenos arquivos dentro de uma partição em compartimentos direcionados a um tamanho de arquivo ideal e os reescreve para o armazenamento. O resultado são os mesmos dados compactados em menos arquivos.
Métodos de compactação
O Microsoft Fabric oferece várias abordagens para manter tamanhos de arquivo ideais em 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 (1 g) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Tamanho do arquivo de destino produzido pelo OPTIMIZE comando. |
1073741824 (1g) | spark.databricks.delta.optimize.maxFileSize |
Importante
Embora OPTIMIZE seja uma operação idempotente (o que significa que executá-la duas vezes em uma linha não reescreve nenhum dado), usar um minFileSize que seja muito grande em relação ao tamanho da tabela Delta pode causar amplificação de gravação, tornando a operação mais cara computacionalmente do que o necessário. Por exemplo, se o seu minFileSize estiver configurado para 1 GB e você tiver um arquivo de 900 MB na tabela, o arquivo de 900 MB de tamanho razoável será reescrito quando OPTIMIZE for executado após a escrita de um pequeno arquivo de 1 KB em sua tabela. Para obter diretrizes sobre como gerenciar automaticamente o tamanho do arquivo, consulte a documentação de tamanho do arquivo de destino adaptável .
OPTIMIZE com o Z-Order
Quando a ZORDER BY cláusula é especificada, OPTIMIZE reescreve todos os arquivos ativos para que linhas com valores semelhantes para as colunas de ordem z sejam colocadas nos mesmos arquivos, melhorando a eficácia de ignorar arquivos para consultas que filtram nessas colunas. 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 resultar em menos dados sendo reescritos em um ciclo de vida de tabelas Delta. Conforme ilustrado no diagrama a seguir, a otimização rápida ignora a compactação de compartimentos subótimos. O resultado líquido é trabalhos mais rápidos e mais idempotentes OPTIMIZE, com menos amplificação de escrita.
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 de nível de arquivo minimiza a amplificação de gravação à medida que o tamanho do alvo de compactação muda ao longo do tempo (por exemplo, a partir da avaliação e definição de um tamanho de arquivo alvo adaptável maior). 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.
Defina no nível da sessão para habilitar a compactação automática em novas tabelas:
Defina no nível da tabela para habilitar apenas para tabelas selecionadas:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Use a opção DataFrameWriter para habilitar em novas tabelas:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Ativar nas tabelas já existentes
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
O comportamento da compactação automática pode ser ajustado por meio das seguintes 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 |
Observação
A Microsoft recomenda usar a compactação automática em vez de agendar trabalhos OPTIMIZE . A compactação automática geralmente supera os processos de compactação programados para maximizar o desempenho de leitura/gravação e, muitas vezes, elimina a necessidade de manutenção envolvendo codificação, programação e otimização da frequência de execução desses processos. A compactação automática é recomendada quando os objetivos de nível de serviço de processamento de dados toleram a latência adicional da compactação automática disparada quando a compactação é necessária. Se os requisitos de latência de dados forem estritos, talvez seja mais eficaz agendar a otimização para execução em um pool do Spark separado para que as operações de gravação não vejam picos periódicos devido às operações de compactação síncronas que estão sendo disparadas.
Importante
Embora a compactação seja uma estratégia crítica a ser empregada, ela também deve ser adequadamente emparelhada, evitando a gravação de arquivos pequenos por meio de recursos como otimizar a gravação. Para obter mais informações, consulte as diretrizes sobre como otimizar a gravação.
Manutenção de tabelas do lakehouse
Os usuários podem executar operações de manutenção ad hoc, como OPTIMIZE na interface do usuário do Lakehouse. Para obter mais informações, consulte a manutenção da tabela lakehouse.
Resumo de práticas recomendadas
-
Habilite a Compactação Automática para pipelines de ingestão que possuem gravações pequenas e frequentes (streaming ou microbatch), evitando assim o agendamento manual e mantendo os arquivos compactados automaticamente.
- Para outros padrões de gravação, pode ser benéfico habilitar como seguro contra o acúmulo de arquivos pequenos, mas avaliar se seus objetivos de nível de serviço de processamento de dados toleram picos periódicos no tempo de processamento.
- Agende operações de tabela
OPTIMIZEcompleta durante janelas silenciosas quando precisar reescrever muitas partições ou executar o Z-Order. - Habilite a otimização rápida para reduzir a amplificação de gravação e tornar
OPTIMIZEmais idempotente. - 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.
- Lembre-se de que a compactação de pré-gravação (otimizar gravação) é menos dispendiosa do que a compactação pós-gravação (otimizar). Consulte a documentação de otimização de gravação para obter as melhores práticas.