MERGE INTO (Delta Lake i Azure Databricks)

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

Syntax

MERGE INTO target_table_identifier [AS target_alias]
USING source_table_identifier [<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

  • table_identifier

    • [database_name.] table_name: Ett tabell namn, eventuellt kvalificerat med ett databas namn.
    • delta.`<path-to-table>`: Platsen för en befintlig delta tabell.
  • SOM alias

    Definiera ett tabell Ali Aset.

<merge_condition> =
  How the rows from one relation are combined with the rows of another relation. An expression with a return type of Boolean.

<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 7,3 LTS och senare:
    • Det kan finnas ett valfritt antal WHEN MATCHED och- WHEN NOT MATCHED satser.
    • Flera matchningar tillåts när matchningar inte villkorligt tas bort (eftersom ovillkorlig borttagning inte är tvetydig även om det finns flera matchningar).
  • I Databricks Runtime 7,2 och nedan MERGE kan ha högst två WHEN MATCHED satser och högst en 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 ha högst en 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.

    • 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 INTO för komplexa åtgärder som att deduplicera data, upserting ändra data, tillämpa SCD typ 2-åtgärder osv. Se sammanfognings exempel för några exempel.