Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
Databricks SQL
Databricks Runtime
Voegt een set updates, invoegingen en verwijderingen samen op basis van een brontabel in een doel-Delta-tabel.
Deze verklaring wordt alleen ondersteund voor Delta Lake-tabellen.
Deze pagina bevat details voor het gebruik van de juiste syntaxis met de MERGE opdracht. Zie Upsert via een Delta Lake-tabel met merge voor meer informatie over het gebruik van MERGE-operaties om uw gegevens te beheren.
Syntaxis
[ common_table_expression ]
MERGE [ WITH SCHEMA EVOLUTION ] INTO target_table_name [target_alias]
USING source_table_reference [source_alias]
ON merge_condition
{ WHEN MATCHED [ AND matched_condition ] THEN matched_action |
WHEN NOT MATCHED [BY TARGET] [ AND not_matched_condition ] THEN not_matched_action |
WHEN NOT MATCHED BY SOURCE [ AND not_matched_by_source_condition ] THEN not_matched_by_source_action } [...]
matched_action
{ DELETE |
UPDATE SET * |
UPDATE SET { column = { expr | DEFAULT } } [, ...] }
not_matched_action
{ INSERT * |
INSERT (column1 [, ...] ) VALUES ( expr | DEFAULT ] [, ...] )
not_matched_by_source_action
{ DELETE |
UPDATE SET { column = { expr | DEFAULT } } [, ...] }
Parameterwaarden
-
Veelgebruikte tabelexpressies (CTE) zijn een of meer benoemde query's die meerdere keren in het hoofdqueryblok kunnen worden gebruikt om herhaalde berekeningen te voorkomen of om de leesbaarheid van complexe geneste query's te verbeteren.
WITH SCHEMA EVOLUTIONVan toepassing op:
Databricks Runtime 15.2 en hogerHiermee wordt automatische schemaontwikkeling voor deze
MERGEbewerking ingeschakeld. Wanneer dit is ingeschakeld, wordt het schema van de delta-doeltabel automatisch bijgewerkt zodat deze overeenkomt met het schema van de brontabel.-
Een tabelnaam om de tabel te identificeren die wordt gewijzigd. De tabel waarnaar wordt verwezen, moet een Delta-tabel zijn.
De naam mag geen specificatie van opties bevatten.
De tabel mag geen vreemde tabel zijn.
-
Een Tabelalias voor de doelentabel. De alias mag geen kolomlijst bevatten.
-
Een tabelnaam die de brontabel identificeert en moet worden samengevoegd met de doeltabel.
-
Een Tabelalias voor de brontabel. De alias mag geen kolomlijst bevatten.
-
Hoe de rijen van de ene relatie worden gecombineerd met de rijen van een andere relatie. Een expressie met een booleaans retourtype.
WHEN MATCHED [ ANDovereenkomende_voorwaarde]WHEN MATCHEDclausules worden uitgevoerd wanneer een bronrij overeenkomt met een rij in de doeltabel op basis van demerge_conditionen de optionelematch_condition.overeenkomende_actie
DELETEHiermee verwijdert u de overeenkomende rij van de doeltabel.
Meerdere overeenkomsten zijn toegestaan wanneer overeenkomsten onvoorwaardelijk worden verwijderd. Een onvoorwaardelijke verwijdering is niet dubbelzinnig, zelfs als er meerdere overeenkomsten zijn.
UPDATEDe overeenkomende rij van de doeltabel wordt bijgewerkt.
Als u alle kolommen van de doel-Delta-tabel wilt bijwerken met de bijbehorende kolommen van de brongegevensset, gebruikt u
UPDATE SET *. Dit komt overeen metUPDATE SET col1 = source.col1 [, col2 = source.col2 ...]voor alle kolommen van de doel-Delta-tabel. Daarom wordt bij deze actie ervan uitgegaan dat de brontabel dezelfde kolommen heeft als die in de doeltabel, anders genereert de query een analysefout.Notitie
Dit gedrag verandert wanneer automatische schemaontwikkeling is ingeschakeld. Zie Automatische schemaontwikkeling voor Delta Lake-samenvoeging voor meer informatie.
Van toepassing op:
Databricks SQL
Databricks Runtime 11.3 LTS en hogerU kunt
DEFAULTopgeven alsexprom de kolom expliciet bij te werken naar de standaardwaarde.
Als er meerdere
WHEN MATCHEDcomponenten zijn, worden ze geëvalueerd in de volgorde waarin ze zijn opgegeven. ElkeWHEN MATCHEDclausule, met uitzondering van de laatste, moet eenmatched_condition. Anders retourneert de query een NON_LAST_MATCHED_CLAUSE_OMIT_CONDITION-fout .Als geen van de
WHEN MATCHEDvoorwaarden waar is voor een bron- en doelrijpaar dat overeenkomt met demerge_conditionvoorwaarden, blijft de doelrij ongewijzigd.WHEN NOT MATCHED [BY TARGET] [ ANDniet_overeenkomende_voorwaarde]WHEN NOT MATCHED-clausules voegen een rij in wanneer een bronrij niet overeenkomt met een doelrij op basis van demerge_conditionen de optionelenot_matched_condition.Van toepassing op:
Databricks SQL
Databricks Runtime 12.2 LTS en hogerWHEN NOT MATCHED BY TARGETkan worden gebruikt als alias voorWHEN NOT MATCHED.not_matched_conditionmoet een Boole-expressie zijn.INSERT *Hiermee worden alle kolommen van de doel-Delta-tabel ingevoegd met de bijbehorende kolommen van de brongegevensset. Dit komt overeen met
INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...])voor alle kolommen van de doel-Delta-tabel. Deze actie vereist dat de brontabel dezelfde kolommen heeft als die in de doeltabel.Notitie
Dit gedrag verandert wanneer automatische schemaontwikkeling is ingeschakeld. Zie Automatische schemaontwikkeling voor Delta Lake-samenvoeging voor meer informatie.
INSERT ( ... ) VALUES ( ... )De nieuwe rij wordt gegenereerd op basis van de opgegeven kolom en bijbehorende expressies. Alle kolommen in de doeltabel hoeven niet te worden opgegeven. Voor niet-opgegeven doelkolommen wordt de standaardkolom ingevoegd of
NULLals er geen bestaat.Van toepassing op:
Databricks SQL
Databricks Runtime 11.3 LTS en hogerU kunt
DEFAULTopgeven als een expressie om expliciet de standaardkolom voor een doelkolom in te voegen.
Als er meerdere
WHEN NOT MATCHEDcomponenten zijn, worden ze geëvalueerd in de volgorde waarin ze zijn opgegeven. AlleWHEN NOT MATCHEDclausules, met uitzondering van de laatste, moetennot_matched_conditions hebben. Anders retourneert de query een NON_LAST_NOT_MATCHED_CLAUSE_OMIT_CONDITION fout.WHEN NOT MATCHED BY SOURCE [ ANDnot_matched_by_source_condition]Van toepassing op:
Databricks SQL
Databricks Runtime 12.2 LTS en hogerWHEN NOT MATCHED BY SOURCEvoorwaarden worden uitgevoerd wanneer een doelrij niet overeenkomt met rijen in de brontabel op basis van hetmerge_conditionen de optionelenot_match_by_source_conditionwordt geëvalueerd als waar.not_matched_by_source_conditionmoet een Boole-expressie zijn die alleen verwijst naar kolommen uit de doeltabel.niet_gematched_door_bron_actie
DELETEHiermee verwijdert u een rij uit de doeltabel.
UPDATEHiermee wordt de rij van de doeltabel bijgewerkt.
exprmag alleen verwijzen naar kolommen uit de doeltabel, anders genereert de query een analysefout.Van toepassing op:
Databricks SQL
Databricks Runtime 11.3 LTS en hogerU kunt
DEFAULTopgeven alsexprom de kolom expliciet bij te werken naar de standaardwaarde.
Belangrijk
Als u een
WHEN NOT MATCHED BY SOURCEcomponent toevoegt om doelrijen bij te werken of te verwijderen wanneer demerge_conditionresulteert in onwaar, kan dit ertoe leiden dat een groot aantal doelrijen wordt gewijzigd. Voor de beste prestaties past unot_matched_by_source_conditions toe om het aantal bijgewerkte of verwijderde doelrijen te beperken.Als er meerdere
WHEN NOT MATCHED BY SOURCE clauseszijn, worden ze geëvalueerd in de volgorde waarin ze zijn opgegeven. ElkeWHEN NOT MATCHED BY SOURCEclausule, met uitzondering van de laatste, moet eennot_matched_by_source_condition. Anders retourneert de query een NON_LAST_NOT_MATCHED_BY_SOURCE_CLAUSE_OMIT_CONDITION fout.Als geen van de
WHEN NOT MATCHED BY SOURCEvoorwaarden waar is voor een doelrij die niet overeenkomt met rijen in de brontabel op basis van demerge_condition, blijft de doelrij ongewijzigd.
Belangrijk
MERGE-bewerkingen mislukken met een DELTA_MULTIPLE_SOURCE_ROW_MATCHING_TARGET_ROW_IN_MERGE-fout als meer dan één rij in de brontabel overeenkomt met dezelfde rij in de doeltabel op basis van de voorwaarden die zijn opgegeven in de ON- en WHEN MATCHED-clausules. Volgens de SQL-semantiek van samenvoegen is dit type updatebewerking dubbelzinnig omdat het onduidelijk is welke bronrij moet worden gebruikt om de overeenkomende doelrij bij te werken. U kunt de brontabel vooraf verwerken om de mogelijkheid van meerdere overeenkomende resultaten te elimineren. Zie het voorbeeld van change data capture. In dit voorbeeld wordt de wijzigingsgegevensset (de brongegevensset) vooraf verwerkt om alleen de meest recente wijziging voor elke sleutel te behouden voordat deze wijziging in de doel-Delta-tabel wordt toegepast. In Databricks Runtime 15.4 LTS en lagere versies worden alleen voorwaarden in de MERGE clausule overwogen voordat meerdere overeenkomsten worden geëvalueerd.
Voorbeelden
U kunt MERGE INTO gebruiken voor complexe bewerkingen, zoals het dedupliceren van data, upsert van wijzigingsdata, het toepassen van SCD Type 2-bewerkingen, enzovoort. Zie Upsert in een Delta Lake-tabel met behulp van merge voor enkele voorbeelden.
WHEN MATCHED
-- Delete all target rows that have a match in the source table.
> MERGE INTO target USING source
ON target.key = source.key
WHEN MATCHED THEN DELETE
-- Conditionally update target rows that have a match in the source table using the source value.
> MERGE INTO target USING source
ON target.key = source.key
WHEN MATCHED AND target.updated_at < source.updated_at THEN UPDATE SET *
-- Multiple MATCHED clauses conditionally deleting matched target rows and updating two columns for all other matched rows.
> MERGE INTO target USING source
ON target.key = source.key
WHEN MATCHED AND target.marked_for_deletion THEN DELETE
WHEN MATCHED THEN UPDATE SET target.updated_at = source.updated_at, target.value = DEFAULT
WHEN NOT MATCHED [BY TARGET]
-- Insert all rows from the source that are not already in the target table.
> MERGE INTO target USING source
ON target.key = source.key
WHEN NOT MATCHED THEN INSERT *
-- Conditionally insert new rows in the target table using unmatched rows from the source table.
> MERGE INTO target USING source
ON target.key = source.key
WHEN NOT MATCHED BY TARGET AND source.created_at > now() - INTERVAL “1” DAY THEN INSERT (created_at, value) VALUES (source.created_at, DEFAULT)
WHEN NOT MATCHED BY SOURCE
-- Delete all target rows that have no matches in the source table.
> MERGE INTO target USING source
ON target.key = source.key
WHEN NOT MATCHED BY SOURCE THEN DELETE
-- Multiple NOT MATCHED BY SOURCE clauses conditionally deleting unmatched target rows and updating two columns for all other matched rows.
> MERGE INTO target USING source
ON target.key = source.key
WHEN NOT MATCHED BY SOURCE AND target.marked_for_deletion THEN DELETE
WHEN NOT MATCHED BY SOURCE THEN UPDATE SET target.value = DEFAULT
WITH SCHEMA EVOLUTION
-- Multiple MATCHED and NOT MATCHED clauses with schema evolution enabled.
> MERGE WITH SCHEMA EVOLUTION INTO target USING source
ON source.key = target.key
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *
WHEN NOT MATCHED BY SOURCE THEN DELETE