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).
- Det kan finnas ett valfritt antal
- I Databricks Runtime 7,2 och nedan
MERGE
kan ha högst tvåWHEN MATCHED
satser och högst enWHEN 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 enUPDATE
och enDELETE
åtgärd.UPDATE
Åtgärdenmerge
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 finnsUPDATE
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). AllaWHEN 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 motsvararUPDATE 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 haINSERT
å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 kolumnerNULL
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). AllaWHEN 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 motsvararINSERT (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.