Unir (Delta Lake no Azure Databricks)

Misture um conjunto de atualizações, inserções e supressões com base numa tabela de origem numa tabela Delta alvo.

MERGE INTO [db_name.]target_table [AS target_alias]
USING [db_name.]source_table [<time_travel_version>] [AS source_alias]
ON <merge_condition>
[ WHEN MATCHED [ AND <condition> ] THEN <matched_action> ]
[ WHEN MATCHED [ AND <condition> ] THEN <matched_action> ]
[ WHEN NOT MATCHED [ AND <condition> ]  THEN <not_matched_action> ]

em que

<matched_action>  =
  DELETE  |
  UPDATE SET *  |
  UPDATE SET column1 = value1 [, column2 = value2 ...]

<not_matched_action>  =
  INSERT *  |
  INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...])

<time_travel_version>  =
  TIMESTAMP AS OF timestamp_expression |
  VERSION AS OF version
  • Em Databricks Runtime 5.5 LTS e 6.x, MERGE pode ter no máximo 2 WHEN MATCHED cláusulas e no máximo 1 WHEN NOT MATCHED cláusula.
  • WHEN MATCHED as cláusulas são executadas quando uma linha de origem corresponde a uma linha de tabela alvo com base na condição de jogo. Estas cláusulas têm a seguinte semântica.
    • WHEN MATCHED cláusulas podem ter no máximo UPDATE e uma DELETE ação. A UPDATE ação só atualiza as merge colunas especificadas da linha-alvo compatível. A DELETE ação apagará a linha partida.
    • Cada WHEN MATCHED cláusula pode ter uma condição opcional. Se esta condição de cláusula existir, a UPDATE ou DELETE ação é executada para qualquer linha de par de linha de origem-alvo correspondente apenas quando a condição da cláusula é verdadeira.
    • Se houver WHEN MATCHED várias cláusulas, então são avaliadas por ordem de serem especificadas (isto é, a ordem das cláusulas importa). Todas as WHEN MATCHED cláusulas, exceto a última, devem ter condições.
    • Se ambas as WHEN MATCHED cláusulas tiverem condições e nenhuma das condições for verdadeira para um par de linhas de alvo de origem correspondente, então a linha de alvo correspondente fica inalterada.
    • Para atualizar todas as colunas da tabela Delta alvo com as colunas correspondentes do conjunto de dados de origem, utilize UPDATE SET * . Isto é equivalente a UPDATE SET col1 = source.col1 [, col2 = source.col2 ...] todas as colunas da tabela Delta alvo. Por conseguinte, esta ação pressupõe que a tabela de origem tem as mesmas colunas que as da tabela-alvo, caso contrário a consulta lançará um erro de análise.
  • WHEN NOT MATCHED as cláusulas são executadas quando uma linha de origem não corresponde a qualquer linha alvo com base na condição de jogo. Estas cláusulas têm a seguinte semântica.
    • WHEN NOT MATCHED cláusulas só podem ter a INSERT ação. A nova linha é gerada com base na coluna especificada e expressões correspondentes. Todas as colunas da tabela-alvo não precisam de ser especificadas. Para colunas-alvo não NULL especificadas, serão inseridas.

      Nota

      No Databricks Runtime 6.5 e abaixo, deve fornecer todas as colunas na tabela alvo para a INSERT ação.

    • Cada WHEN NOT MATCHED cláusula pode ter uma condição opcional. Se a condição da cláusula estiver presente, uma linha de origem só é inserida se essa condição for verdadeira para essa linha. Caso contrário, a coluna de origem é ignorada.

    • Se houver WHEN NOT MATCHED várias cláusulas, então são avaliadas por ordem de serem especificadas (isto é, a ordem das cláusulas importa). Todas as WHEN NOT MATCHED cláusulas, exceto a última, devem ter condições.

    • Para inserir todas as colunas da tabela Delta alvo com as colunas correspondentes do conjunto de dados de origem, utilize INSERT * . Isto é equivalente a INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...]) todas as colunas da tabela Delta alvo. Por conseguinte, esta ação pressupõe que a tabela de origem tem as mesmas colunas que as da tabela-alvo, caso contrário a consulta lançará um erro de análise.

      Nota

      Este comportamento muda quando a migração automática de esquemas está ativada. Consulte a evolução automática do esquema para obter mais detalhes.

Importante

Uma MERGE operação pode falhar se várias linhas do conjunto de dados de origem corresponderem e tentar atualizar as mesmas linhas da tabela Delta alvo. De acordo com a semântica SQL de fusão, tal operação de atualização é ambígua, uma vez que não é claro qual a linha de origem que deve ser usada para atualizar a linha-alvo compatível. Pode pré-processar a tabela de origem para eliminar a possibilidade de vários jogos. Consulte o exemplo de captura de dados de alteração— pré-processa o conjunto de dados de alteração (isto é, o conjunto de dados de origem) para reter apenas a última alteração para cada chave antes de aplicar essa alteração na tabela Delta alvo.

Exemplos

Pode utilizar MERGE para operações complexas como desduplicação de dados, aumento de dados de alteração, aplicação de operações SCD Type 2. Consulte exemplos de fusão para alguns exemplos.