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 表数据。