Otimização de mesclagem de baixa confusão em tabelas Delta

O comando Delta Lake MERGE permite que os usuários atualizem uma tabela delta com condições avançadas. Ele pode atualizar dados de uma tabela de origem, exibição ou DataFrame em uma tabela de destino usando o comando MERGE. No entanto, o algoritmo atual não está totalmente otimizado para lidar com linhas não modificadas . Com a otimização de Mesclagem Baixa Aleatória, as linhas não modificadas são excluídas de uma operação de embaralhamento cara que é necessária para atualizar as linhas correspondentes.

Por que precisamos do Low Shuffle Merge

Atualmente, a operação MERGE é 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 quaisquer linhas correspondentes. Depois disso, ele executa a segunda junção lendo apenas os arquivos tocados e dados de origem, para fazer a atualização real da tabela. Mesmo que 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 dada. O segundo para atualização de tabela precisa carregar todas as colunas, o que incorre em um processo de embaralhamento caro.

Com a otimização de mesclagem de baixa obscuridade, a Delta mantém o resultado da linha correspondente da primeira junção temporariamente e o utiliza para a segunda associação. Com base no resultado, exclui linhas não modificadas do processo de embaralhamento pesado. Haveria dois trabalhos de gravação separados para linhas correspondentes e linhas não modificadas , portanto, poderia resultar em um número de 2x 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

Nota

  • Low Shuffle Merge está disponível como um recurso de visualização.

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

Versão Disponibilidade Predefinido
Delta 0.6 / Faísca 2.4 Não -
Delta 1.2 / Faísca 3.2 Sim false
Delta 2.2 / Faísca 3.3 Sim verdadeiro

Benefícios do Low Shuffle Merge

  • As linhas não modificadas em arquivos tocados são tratadas separadamente e não passam pela operação MERGE real. Ele pode economizar o tempo geral de execução do MERGE e os recursos de computação. O ganho seria maior quando muitas linhas são copiadas e apenas algumas linhas são atualizadas.
  • As ordens de linha são preservadas para linhas não modificadas. Portanto, os arquivos de saída de linhas não modificadas ainda podem ser eficientes para pular dados se o arquivo foi classificado ou Z-ORDERED.
  • Haveria uma pequena sobrecarga mesmo para o pior caso quando a condição MERGE corresponde a todas as linhas em arquivos tocados.

Como ativar e desativar o Low Shuffle Merge

Assim 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 baixa aleatória, habilite-a usando a seguinte configuração:

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

Para verificar o valor da configuração atual, use o comando como mostrado abaixo:

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

Para desativar 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. SQL do Apache Spark
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = false