Sammanfoga (Delta Lake på Azure Databricks)

Sammanfoga en uppsättning uppdateringar, infogningar och borttagningar baserat på en källtabell i en Delta-måltabell.

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> ]

var

<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
  • I Databricks Runtime 5.5 LTS och 6.x kan ha högst MERGE 2 satser och WHEN MATCHED högst 1-sats. WHEN NOT MATCHED
  • WHEN MATCHED -satser körs när en källrad matchar en måltabellrad baserat på matchningsvillkoret. Dessa satser har följande semantik.
    • WHEN MATCHED -satser kan ha högst på UPDATE och en DELETE åtgärd. Åtgärden UPDATE i uppdaterar endast de angivna merge kolumnerna för den matchade målraden. Åtgärden DELETE tar bort den matchade raden.
    • Varje WHEN MATCHED -sats kan ha ett valfritt villkor. Om det finns ett villkor för den här satsen körs åtgärden eller endast för matchande UPDATEDELETE radparrad för käll-mål när satsvillkoret är sant.
    • Om det finns flera satser utvärderas de i den ordning de anges WHEN MATCHED (d.v.s. ordningen på satserna spelar roll). Alla WHEN MATCHED satser utom den sista måste ha villkor.
    • Om båda satserna har villkor och inget av villkoren är sanna för ett matchande käll-målradpar lämnas den matchade WHEN MATCHED målraden oförändrad.
    • Om du vill uppdatera alla kolumner i Delta-måltabellen med motsvarande kolumner i källdatauppsättningen använder du UPDATE SET * . Detta motsvarar för UPDATE SET col1 = source.col1 [, col2 = source.col2 ...] alla kolumner i Delta-måltabellen. Den här åtgärden förutsätter därför att källtabellen har samma kolumner som i måltabellen, annars returnerar frågan ett analysfel.
  • WHEN NOT MATCHED -satser körs när en källrad inte matchar någon målrad baserat på matchningsvillkoret. Dessa satser har följande semantik.
    • WHEN NOT MATCHED -satser kan bara ha INSERT åtgärden. Den nya raden genereras baserat på den angivna kolumnen och motsvarande uttryck. Alla kolumner i måltabellen behöver inte anges. För ospecificerade NULL målkolumner infogas.

      Anteckning

      I Databricks Runtime 6.5 och lägre måste du ange alla kolumner i måltabellen för INSERT åtgärden.

    • Varje WHEN NOT MATCHED -sats kan ha ett valfritt villkor. Om satsens villkor finns infogas en källrad endast om villkoret är sant för den raden. Annars ignoreras källkolumnen.

    • Om det finns flera satser utvärderas de i den ordning de anges WHEN NOT MATCHED (d.v.s. ordningen på satserna spelar roll). Alla WHEN NOT MATCHED satser utom den sista måste ha villkor.

    • Om du vill infoga alla kolumner i deltatabellen i målet med motsvarande kolumner i källdatauppsättningen använder du INSERT * . Detta motsvarar för INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...]) alla kolumner i Delta-måltabellen. Den här åtgärden förutsätter därför att källtabellen har samma kolumner som i måltabellen, annars returnerar frågan ett analysfel.

      Anteckning

      Det här beteendet ändras när automatisk schemamigrering är aktiverat. Mer information finns i Automatisk schemautveckling.

Viktigt

En MERGE åtgärd kan misslyckas om flera rader i källdatauppsättningen matchar och försöker uppdatera samma rader i deltatabellen för målet. Enligt den SQL semantiken för sammanfogning är en sådan uppdateringsåtgärd tvetydig eftersom det är oklart vilken källrad som ska användas för att uppdatera den matchade målraden. Du kan förbearbeta källtabellen för att eliminera risken för flera matchningar. Se exemplet medatt samla in ändringsdata – den förbearbetar ändringsdatauppsättningen (det vill säga källdatauppsättningen) för att endast behålla den senaste ändringen för varje nyckel innan ändringen tillämpas i deltatabellmålet.

Exempel

Du kan använda MERGE för komplexa åtgärder som att deduplicera data, upserera ändringsdata och tillämpa scd-åtgärder av typ 2. Några exempel finns i Slå ihop exempel.