Pular para o conteúdo principal

Low shuffle merge on Databricks

nota

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.

nota

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.