Compartilhar via


Otimização de Mesclagem em ordem aleatória baixa em tabelas Delta

O comando MESCLAR do Delta Lake permite que os usuários atualizem uma tabela delta com condições avançadas. Você pode fazer atualização de dados de uma tabela de origem, exibição ou DataFrame em uma tabela de destino usando o comando MESCLAR. No entanto, o algoritmo atual não é totalmente otimizado para lidar com linhas não modificadas. Com a otimização de Mesclagem em ordem aleatória baixa, as linhas não modificadas são excluídas de uma operação de embaralhamento dispendiosa necessária para atualizar linhas correspondentes.

Porque precisamos de Mesclagem aleatória baixa

Atualmente, a operação MESCLAR é feita por duas execuções de Junção. A primeira junção é usar toda a tabela de destino e os dados de origem para encontrar uma lista de arquivos tocados da tabela de destino, incluindo todas as linhas correspondentes. Depois disso, é executada a segunda junção lendo apenas os arquivos tocados e os dados de origem para fazer a atualização real da tabela. Embora a primeira junção seja para reduzir a quantidade de dados para a segunda junção, ainda pode haver um grande número de linhas não modificadas em arquivos tocados. A primeira consulta de junção é mais leve, pois lê apenas colunas na condição de correspondência fornecida. A segunda para atualização de tabela precisará carregar todas as colunas, o que incorre em um processo de mesclagem caro.

Com a otimização de Mesclagem em ordem aleatória baixa, o Delta mantém temporariamente o resultado da linha correspondente da primeira junção e o utiliza para a segunda junção. Com base no resultado, ele exclui linhas não modificadas do processo de mesclagem pesado. Haveria dois trabalhos de gravação separados para linhas correspondentes e linhas não modificadas, portanto, poderia resultar no dobro de arquivos de saída em comparação com o comportamento anterior. No entanto, o ganho de desempenho esperado supera o possível problema de arquivos pequenos.

Disponibilidade

Observação

  • A Mesclagem em ordem aleatória baixa está disponível como versão prévia do recurso.

Está disponível nos Pools do Synapse para Apache Spark versões 3.2 e 3.3.

Versão Disponibilidade Padrão
Delta 0.6 / Spark 2.4 Não -
Delta 1.2 / Spark 3.2 Sim false
Delta 2.2 / Spark 3.3 Sim true

Benefícios da Mesclagem em ordem aleatória baixa

  • Linhas não modificadas em arquivos tocados são tratadas separadamente e não passam pela operação de MESCLAGEM real. Pode poupar o tempo de execução de MESCLAGEM geral e os recursos de computação. O ganho será maior quando muitas linhas são copiadas e apenas algumas linhas são atualizadas.
  • As ordenações de linha são preservadas para linhas não modificadas. Portanto, os arquivos de saída de linhas não modificadas ainda poderão ser eficientes para ignorar dados se o arquivo tiver sido classificado ou Z-ORDENADO.
  • Haveria uma pequena sobrecarga, mesmo para o pior caso, quando a condição MESCLAR corresponder a todas as linhas em arquivos tocados.

Como habilitar e desabilitar a Mesclagem em ordem aleatória baixa

Depois que a configuração for definida para o pool ou sessão, todos os padrões de gravação do Spark usarão a funcionalidade.

Para usar a otimização de Mesclagem em ordem aleatória baixa, habilite-a usando a seguinte configuração:

  1. Scala e PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "true")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = true

Para verificar o valor de configuração atual, use o comando, conforme mostrado abaixo:

  1. Scala e PySpark
spark.conf.get("spark.microsoft.delta.merge.lowShuffle.enabled")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled`

Para desabilitar o recurso, altere a seguinte configuração, conforme mostrado abaixo:

  1. Scala e PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "false")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = false