Sammanfoga (Delta Lake på Azure Databricks)

Sammanfoga en uppsättning uppdateringar, infogningar och borttagningar baserat på en käll tabell i en mål delta tabell.

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 MERGE kan ha högst 2 WHEN MATCHED satser och högst 1- WHEN NOT MATCHED sats.
  • WHEN MATCHED satser körs när en käll rad matchar en mål tabell rad baserat på matchnings villkoret. Dessa satser har följande semantik.
    • WHEN MATCHED satser får högst vara på UPDATE och en DELETE åtgärd. UPDATEÅtgärden merge uppdaterar bara de angivna kolumnerna i den matchade mål raden. DELETEÅtgärden tar bort den matchade raden.
    • Varje WHEN MATCHED sats kan ha ett valfritt villkor. Om det här sats villkoret finns UPDATE DELETE utförs eller utförs åtgärden för alla matchande käll måls rad par rader när sats villkoret är sant.
    • Om det finns flera WHEN MATCHED satser utvärderas de i angiven ordning (det vill säga ordningen på instansen). Alla WHEN MATCHED satser, förutom den sista, måste ha villkor.
    • Om båda WHEN MATCHED satserna har villkor och inget av villkoren är sant för ett matchande käll måls rads par, lämnas den matchade mål raden oförändrad.
    • Om du vill uppdatera alla kolumner i mål delta tabellen med motsvarande kolumner i käll data uppsättningen använder du UPDATE SET * . Detta motsvarar UPDATE SET col1 = source.col1 [, col2 = source.col2 ...] för alla kolumner i mål delta tabellen. Därför förutsätter den här åtgärden att käll tabellen har samma kolumner som de i mål tabellen, annars genererar frågan ett analys fel.
      • Det här beteendet ändras när automatisk schema migrering har Aktiver ATS. Mer information finns i avsnittet om Automatisk schema utveckling .
  • WHEN NOT MATCHED satser körs när en käll rad inte matchar någon mål rad baserat på matchnings villkoret. 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ål tabellen behöver inte anges. För ospecificerade mål kolumner NULL infogas.

      Anteckning

      I Databricks Runtime 6,5 och nedan måste du ange alla kolumner i mål tabellen för INSERT åtgärden.

    • Varje WHEN NOT MATCHED sats kan ha ett valfritt villkor. Om sats villkoret finns infogas en käll rad endast om det villkoret är sant för raden. Annars ignoreras käll kolumnen.

    • Om det finns flera WHEN NOT MATCHED satser utvärderas de i angiven ordning (det vill säga ordningen på instansen). Alla WHEN NOT MATCHED satser, förutom den sista, måste ha villkor.

    • Om du vill infoga alla kolumner i mål delta tabellen med motsvarande kolumner i käll data uppsättningen använder du INSERT * . Detta motsvarar INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...]) för alla kolumner i mål delta tabellen. Därför förutsätter den här åtgärden att käll tabellen har samma kolumner som de i mål tabellen, annars genererar frågan ett analys fel.

      Anteckning

      Det här beteendet ändras när automatisk schema migrering har Aktiver ATS. Mer information finns i avsnittet om Automatisk schema utveckling .

Viktigt

En MERGE åtgärd kan Miss lyckas om flera rader i käll data uppsättningen matchar och försöker uppdatera samma rader i mål delta tabellen. Enligt SQL-semantiken för sammanfogningen är en sådan uppdatering tvetydig eftersom den är oklar vilken käll rad som ska användas för att uppdatera den matchade målraden. Du kan Förbearbeta käll tabellen för att eliminera risken för flera matchningar. Se exempel på ändrings data insamling– den förbrukar ändrings data uppsättningen (det vill säga käll data uppsättningen) så att den endast behåller den senaste ändringen för varje nyckel innan den här ändringen tillämpas i mål delta tabellen.

Exempel

Du kan använda MERGE för komplexa åtgärder som att deduplicera data, upserting ändra data, tillämpa SCD typ 2-åtgärder. Se sammanfognings exempel för några exempel.