View a markdown version of this page

MERGE INTO - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

MERGE INTO

有条件地更新行、删除行或将行插入到 Apache Iceberg 表中。单个语句可以组合更新、删除和插入操作。

注意

MERGE INTO 是事务性的,仅支持用于 Athena 引擎版本 3 中的 Apache Iceberg 表。

摘要

要从 Iceberg 表中有条件地更新、删除或插入行,请使用以下语法。

MERGE INTO target_table [ [ AS ] target_alias ] USING { source_table | query } [ [ AS ] source_alias ] ON search_condition when_clause [...]

when_clause 是以下语法之一:

WHEN MATCHED [ AND condition ] THEN DELETE
WHEN MATCHED [ AND condition ] THEN UPDATE SET ( column = expression [, ...] )
WHEN NOT MATCHED [ AND condition ] THEN INSERT (column_name[, column_name ...]) VALUES (expression, ...)

MERGE 支持任意数量的具有不同 MATCHED 条件的 WHEN 子句。条件子句会执行 MATCHED 状态和匹配条件所选择的第一个 WHEN 子句中的 DELETE、UPDATE 或 INSERT 操作。

对于每个源行,WHEN 子句会按顺序处理。仅执行第一个匹配的 WHEN 子句。后续子句将忽略。如果单个目标表行与多个源行匹配,会引发用户错误。

如果源行与任何 WHEN 子句均不匹配且没有 WHEN NOT MATCHED 子句,则会忽略源行。

在具有 UPDATE 操作的 WHEN 子句中,列值表达式可以引用目标或源的任何字段。如果是 NOT MATCHED 字句,INSERT 表达式可以引用源的任何字段。

示例

如果第一个表中不存在行,则以下示例会将第二个表中的行合并到第一个表中。请注意,VALUES 子句中列出的列必须以源表别名为前缀。INSERT 子句中列出的目标列不得以此为前缀。

MERGE INTO iceberg_table_sample as ice1 USING iceberg2_table_sample as ice2 ON ice1.col1 = ice2.col1 WHEN NOT MATCHED THEN INSERT (col1) VALUES (ice2.col1)

有关更多 MERGE INTO 示例,请参阅 更新 Iceberg 表数据。