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