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 子句中的 DELETEUPDATEINSERT 操作。

对于每个源行,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 表数据