Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O comando MERGE do Delta Lake permite aos utilizadores atualizar uma tabela Delta com condições avançadas. Pode atualizar dados de uma tabela de origem, vista ou DataFrame para uma tabela de destino usando MERGE comandos. No entanto, o algoritmo atual não está totalmente otimizado para lidar com linhas não modificadas . Com a baixa otimização de fusão de embaralhamento, as linhas não modificadas são excluídas de uma operação de embaralhamento dispendiosa necessária para atualizar linhas emparelhadas.
Note
A fusão de baixo embaralhamento está disponível e ativada por defeito em todos os tempos de execução Fabric Spark para melhorar drasticamente o desempenho das operações MERGE.
Porque precisamos de fusão de baixo embaralhamento
Atualmente, MERGE a operação é feita por duas execuções Join. A primeira junção é usar toda a tabela de destino e os dados de origem, para encontrar uma lista de ficheiros tocados da tabela de destino, incluindo quaisquer linhas correspondentes. Depois disso, realiza a segunda junção lendo apenas os ficheiros 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 enorme número de linhas não modificadas em ficheiros tocados . A primeira consulta de junção é mais leve, pois só lê colunas na condição de correspondência dada. O segundo, para atualização de tabelas, precisa de carregar todas as colunas, o que implica um processo de embaralhamento dispendioso.
Com uma otimização de fusões de baixo embaralhamento, a Delta mantém temporariamente o resultado da linha emparelhada da primeira junção e utiliza-o para a segunda junção. Com base no resultado, exclui as linhas não modificadas do processo pesado de embaralhamento. Haveria dois trabalhos de escrita separados para linhas emparelhadas e linhas não modificadas , pelo que poderia resultar em 2x o número de ficheiros de saída em comparação com o comportamento anterior. No entanto, o ganho de desempenho esperado supera o possível problema dos ficheiros pequenos.
Benefícios da fusão de baixo embaralhamento
- As linhas não modificadas em ficheiros tocados são tratadas separadamente e não passam pela operação real de MERGE. Pode poupar o tempo total de execução do MERGE e os recursos de computação. O ganho seria maior quando muitas linhas são copiadas e apenas algumas são atualizadas.
- As ordenações das linhas são preservadas para as linhas não modificadas. Assim, os ficheiros de saída das linhas não modificadas poderiam continuar a ser eficientes para saltar dados se o ficheiro fosse ordenado ou Z-ORDENADO.
- Haveria uma pequena sobrecarga mesmo no pior dos casos, quando a condição MERGE corresponde a todas as linhas dos ficheiros tocados.
Como ativar e desativar o Low Shuffle Merge
A fusão de baixo embaraço está ativada por defeito como configuração de sessão Spark: