Low shuffle merge on Databricks
Low shuffle merge está geralmente disponível (GA) em Databricks Runtime 10.4 lTS e acima e em Public Preview em Databricks Runtime 9.1 LTS. Databricks recomenda que os clientes do Preview migrem para Databricks Runtime 10.4 LTS ou acima.
O comando merge é usado para realizar atualizações, inserções e exclusões simultâneas de uma tabela Delta Lake. A Databricks tem uma implementação otimizada do MERGE
que melhora substancialmente o desempenho de cargas de trabalho comuns, reduzindo o número de operações de embaralhamento.
O Databricks low shuffle merge oferece melhor desempenho ao processar linhas não modificadas em um modo de processamento separado e mais simplificado, em vez de processá-las junto com as linhas modificadas. Como resultado, a quantidade de dados embaralhados é reduzida significativamente, levando a um melhor desempenho. O baixo número de embaralhamentos merge também reduz a necessidade de os usuários reexecutarem o comando OPTIMIZE ZORDER BY depois de realizar MERGE
operações.
Desempenho otimizado
Muitas cargas de trabalho do MERGE
atualizam apenas um número relativamente pequeno de linhas em uma tabela. No entanto, as tabelas Delta só podem ser atualizadas por arquivo. Quando o comando MERGE
precisa atualizar ou excluir um pequeno número de linhas armazenadas em um determinado arquivo, ele também deve processar e reescrever todas as linhas restantes armazenadas no mesmo arquivo, mesmo que essas linhas não tenham sido modificadas. Low shuffle merge otimiza o processamento de linhas não modificadas. Anteriormente, elas eram processadas da mesma forma que as linhas modificadas, passando-as por vários estágios aleatórios e cálculos caros. No low shuffle merge, as linhas não modificadas são processadas sem nenhum shuffle, processamento caro ou outra sobrecarga adicional.
Disposição otimizada de dados
Além de ser mais rápido na execução, o baixo shuffle merge também beneficia as operações subsequentes. A implementação anterior do MERGE
fez com que a disposição dos dados não modificados fosse totalmente alterada, resultando em menor desempenho nas operações subsequentes. Low shuffle merge tenta preservar a disposição de dados existente dos registros não modificados, incluindo a otimizaçãoZ-order em uma base de melhor esforço. Portanto, com baixo shuffle merge, o desempenho das operações em uma tabela Delta se degradará mais lentamente após a execução de um ou mais MERGE
comandos.
Low shuffle merge tenta preservar a disposição dos dados nos dados existentes que não são modificados. A disposição dos dados atualizados ou recém-inseridos pode não ser a ideal, portanto, ainda pode ser necessário executar o comando OPTIMIZE
ou OPTIMIZE ZORDER BY.
Disponibilidade
merge aleatória baixa é habilitada por default no Databricks Runtime 10.4e acima. Em versões anteriores do Databricks Runtime com suporte, ele pode ser ativado definindo a configuração spark.databricks.delta.merge.enableLowShuffle
como true
. Este sinalizador não tem efeito no Databricks Runtime 10.4e acima.