Low shuffle merge on Databricks
O Delta Lake atualiza uma tabela reescrevendo arquivos de dados inteiros. Quando um comando MERGE atualiza ou exclui algumas linhas em um arquivo, ele também deve reescrever cada linha não modificada nesse arquivo. Sem o merge de baixo embaralhamento, essas linhas não modificadas passam pelos mesmos estágios de embaralhamento que as linhas modificadas. Isso torna MERGE mais lento e embaralha a disposição de dados existente, para que as queries posteriores também fiquem mais lentas.
O baixo shuffle merge é a implementação otimizada do Databricks de MERGE. Ele processa linhas não modificadas separadamente das linhas modificadas, sem embaralhamentos ou outros cálculos dispendiosos. Como resultado, o MERGE embaralha muito menos dados e tem execução mais rápida.
merge aleatória baixa é habilitada por default, portanto você não precisa alterar suas instruções MERGE para se beneficiar dele. Ajuda principalmente quando uma MERGE atualiza um número relativamente pequeno de linhas em uma tabela grande.
Disposição de dados após um merge
A implementação MERGE anterior alterou completamente a disposição de dados de dados não modificados, o que reduziu a velocidade das operações posteriores. merge aleatória baixa tenta preservar a disposição existente de linhas não modificadas, incluindo a disposição de clusterização líquida. Como resultado, o desempenho é degradado mais lentamente após um ou mais comandos MERGE e você precisa de execução OPTIMIZE com menos frequência.
A disposição das linhas atualizadas ou recém-inseridas pode não ser ideal. Você ainda pode precisar executar uma execução de OPTIMIZE em tabelas com o liquid clustering ativado.
Para tabelas que usam Z-ordering, o baixo shuffle merge também tenta preservar a disposição de Z-order existente das linhas não modificadas. Pode ser necessário realizar a execução de OPTIMIZE ZORDER BY após uma operação MERGE. O Databricks recomenda o uso de clustering líquido para todas as novas tabelas.