Merge Into (Delta Lake in Azure Databricks)Merge Into (Delta Lake on Azure Databricks)

Zusammenführen eines Satzes von Aktualisierungen, Einfügungen und Löschungen, die auf einer Quell Tabelle basieren, in eine Delta Tabelle für das Ziel.Merge a set of updates, insertions, and deletions based on a source table into a target Delta table.

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

wherewhere

<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
  • Es können beliebig viele WHEN MATCHED -und- WHEN NOT MATCHED Klauseln vorhanden sein.There can be any number of WHEN MATCHED and WHEN NOT MATCHED clauses.

Hinweis

In Databricks Runtime 7,2 und unten MERGE können höchstens 2 WHEN MATCHED Klauseln und höchstens 1 Klausel enthalten WHEN NOT MATCHED .In Databricks Runtime 7.2 and below, MERGE can have at most 2 WHEN MATCHED clauses and at most 1 WHEN NOT MATCHED clause.

  • WHEN MATCHED Klauseln werden ausgeführt, wenn eine Quellzeile basierend auf der Übereinstimmungs Bedingung mit einer Ziel Tabellenzeile übereinstimmt.WHEN MATCHED clauses are executed when a source row matches a target table row based on the match condition. Diese Klauseln weisen die folgende Semantik auf.These clauses have the following semantics.
    • WHEN MATCHED Klauseln können höchstens UPDATE ein und eine Aktion aufweisen DELETE .WHEN MATCHED clauses can have at most on UPDATE and one DELETE action. Mit der- UPDATE Aktion in werden merge nur die angegebenen Spalten der übereinstimmenden Zielzeile aktualisiert.The UPDATE action in merge only updates the specified columns of the matched target row. Durch die DELETE Aktion wird die übereinstimmende Zeile gelöscht.The DELETE action will delete the matched row.
    • Jede WHEN MATCHED Klausel kann eine optionale Bedingung aufweisen.Each WHEN MATCHED clause can have an optional condition. Wenn diese klauselbedingung vorhanden ist, wird die- UPDATE Aktion oder die- DELETE Aktion für alle übereinstimmenden Quell-Ziel Zeilenpaare nur dann ausgeführt, wenn die-klauselbedingung true ist.If this clause condition exists, the UPDATE or DELETE action is executed for any matching source-target row pair row only when when the clause condition is true.
    • Wenn mehrere-Klauseln vorhanden sind WHEN MATCHED , werden diese in der Reihenfolge ausgewertet, in der Sie angegeben sind (d. h. die Reihenfolge der Klauseln ist wichtig).If there are multiple WHEN MATCHED clauses, then they are evaluated in order they are specified (that is, the order of the clauses matter). Alle WHEN MATCHED Klauseln, mit Ausnahme des letzten, müssen Bedingungen aufweisen.All WHEN MATCHED clauses, except the last one, must have conditions.
    • Wenn beide WHEN MATCHED Klauseln Bedingungen aufweisen und keine der Bedingungen für ein übereinstimmendes Quell Ziel-Zeilen paar zutrifft, bleibt die übereinstimmende Zielzeile unverändert.If both WHEN MATCHED clauses have conditions and neither of the conditions are true for a matching source-target row pair, then the matched target row is left unchanged.
    • Verwenden Sie, um alle Spalten der Ziel Delta Tabelle mit den entsprechenden Spalten des Quell DataSets zu aktualisieren UPDATE SET * .To update all the columns of the target Delta table with the corresponding columns of the source dataset, use UPDATE SET *. Dies entspricht UPDATE SET col1 = source.col1 [, col2 = source.col2 ...] für alle Spalten der Ziel Delta Tabelle.This is equivalent to UPDATE SET col1 = source.col1 [, col2 = source.col2 ...] for all the columns of the target Delta table. Bei dieser Aktion wird daher vorausgesetzt, dass die Quell Tabelle die gleichen Spalten wie die in der Ziel Tabelle aufweist; andernfalls löst die Abfrage einen Analysefehler aus.Therefore, this action assumes that the source table has the same columns as those in the target table, otherwise the query will throw an analysis error.
  • WHEN NOT MATCHED Klauseln werden ausgeführt, wenn eine Quellzeile auf der Grundlage der Übereinstimmungs Bedingung keiner Zielzeile entspricht.WHEN NOT MATCHED clauses are executed when a source row does not match any target row based on the match condition. Diese Klauseln weisen die folgende Semantik auf.These clauses have the following semantics.
    • WHEN NOT MATCHED Klauseln können nur die INSERT Aktion aufweisen.WHEN NOT MATCHED clauses can only have the INSERT action. Die neue Zeile wird basierend auf der angegebenen Spalte und den entsprechenden Ausdrücken generiert.The new row is generated based on the specified column and corresponding expressions. Alle Spalten in der Ziel Tabelle müssen nicht angegeben werden.All the columns in the target table do not need to be specified. Für nicht angegebene Ziel Spalten NULL wird eingefügt.For unspecified target columns, NULL will be inserted.

      Hinweis

      In Databricks Runtime 6,5 und unten müssen Sie alle Spalten in der Ziel Tabelle für die Aktion angeben INSERT .In Databricks Runtime 6.5 and below, you must provide all columns in the target table for the INSERT action.

    • Jede WHEN NOT MATCHED Klausel kann eine optionale Bedingung aufweisen.Each WHEN NOT MATCHED clause can have an optional condition. Wenn die klauselbedingung vorhanden ist, wird eine Quellzeile nur eingefügt, wenn diese Bedingung für diese Zeile erfüllt ist.If the clause condition is present, a source row is inserted only if that condition is true for that row. Andernfalls wird die Quell Spalte ignoriert.Otherwise, the source column is ignored.

    • Wenn mehrere-Klauseln vorhanden sind WHEN NOT MATCHED , werden diese in der Reihenfolge ausgewertet, in der Sie angegeben sind (d. h. die Reihenfolge der Klauseln ist wichtig).If there are multiple WHEN NOT MATCHED clauses, then they are evaluated in order they are specified (that is, the order of the clauses matter). Alle WHEN NOT MATCHED Klauseln, mit Ausnahme des letzten, müssen Bedingungen aufweisen.All WHEN NOT MATCHED clauses, except the last one, must have conditions.

    • Um alle Spalten der Ziel Delta Tabelle mit den entsprechenden Spalten des Quell DataSets einzufügen, verwenden Sie INSERT * .To insert all the columns of the target Delta table with the corresponding columns of the source dataset, use INSERT *. Dies entspricht INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...]) für alle Spalten der Ziel Delta Tabelle.This is equivalent to INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...]) for all the columns of the target Delta table. Bei dieser Aktion wird daher vorausgesetzt, dass die Quell Tabelle die gleichen Spalten wie die in der Ziel Tabelle aufweist; andernfalls löst die Abfrage einen Analysefehler aus.Therefore, this action assumes that the source table has the same columns as those in the target table, otherwise the query will throw an analysis error.

      Hinweis

      Dieses Verhalten ändert sich, wenn die automatische Schema Migration aktiviert ist.This behavior changes when automatic schema migration is enabled. Weitere Informationen finden Sie unter Automatische Schema Entwicklung .See Automatic schema evolution for details.

Wichtig

Ein MERGE -Vorgang kann fehlschlagen, wenn mehrere Zeilen des Quell DataSets übereinstimmen, und versuchen, die gleichen Zeilen der Ziel Delta Tabelle zu aktualisieren.A MERGE operation can fail if multiple rows of the source dataset match and attempt to update the same rows of the target Delta table. Gemäß der SQL-Semantik von Merge ist ein solcher Aktualisierungs Vorgang mehrdeutig, da unklar ist, welche Quellzeile zum Aktualisieren der übereinstimmenden Zielzeile verwendet werden soll.According to the SQL semantics of merge, such an update operation is ambiguous as it is unclear which source row should be used to update the matched target row. Sie können die Quell Tabelle vorverarbeiten, um die Möglichkeit mehrerer Übereinstimmungen zu vermeiden.You can preprocess the source table to eliminate the possibility of multiple matches. Weitere Informationen finden Sie im Beispiel für Change Data Capture– das Änderungs DataSet (d. h. das Quell DataSet) wird vor dem Anwenden der Änderung in die Ziel Delta Tabelle vorverarbeitet.See the Change data capture example—it preprocesses the change dataset (that is, the source dataset) to retain only the latest change for each key before applying that change into the target Delta table.

Hinweis

In Databricks Runtime 7,3 LTS und höher sind mehrere Übereinstimmungen zulässig, wenn Übereinstimmungen bedingungslos gelöscht werden (da die bedingungslose Löschung nicht mehrdeutig ist, auch wenn mehrere Übereinstimmungen vorhanden sind).In Databricks Runtime 7.3 LTS and above, multiple matches are allowed when matches are unconditionally deleted (since unconditional delete is not ambiguous even if there are multiple matches).

BeispieleExamples

Sie können MERGE für komplexe Vorgänge wie das deduplizieren von Daten, das Upsert von Änderungs Daten, das Anwenden von SCD-Typ 2-Vorgängen usw. verwenden. Einige Beispiele finden Sie unter zusammen führen von Beispielen .You can use MERGE for complex operations like deduplicating data, upserting change data, applying SCD Type 2 operations, etc. See Merge examples for a few examples.