MERGE INTO¶
原生 MatrixOne 表不支持
MERGE INTO。该语句是否可用取决于 Iceberg 的写入、DML 和删除配置。
描述¶
MERGE INTO 将源关系中的行合并到目标表中。对于每一行,ON 条件决定它是否匹配:
WHEN MATCHED THEN UPDATE SET ...更新匹配的目标行。WHEN MATCHED THEN DELETE删除匹配的目标行。WHEN NOT MATCHED THEN INSERT ... VALUES (...)插入新行。
每个动作子句都可以附加一个 AND <condition> 来进一步限定其适用条件。至少需要一个动作子句。
在 MatrixOne 中,MERGE INTO 目前仅支持以 Iceberg 表映射作为合并目标。因此目标表必须是由已注册的 Iceberg 目录支持的外部表。
前置条件¶
MERGE INTO 目前仅适用于 Iceberg 外部表映射。使用前需要:
注册并配置 Iceberg 目录。
配置 principal mapping 和 residency policy。
启用 Iceberg 写入操作。
启用 DML 和删除操作。
Iceberg 默认关闭。需要在每个可能执行该语句的 CN 上启用全部写入和行级 DML 开关:
[cn.frontend.iceberg]
enable = true
enable-write = true
enable-dml = true
enable-delete = true
目录还必须按照 CREATE ICEBERG CATALOG 中的说明,通过 iceberg_register_access 注册 principal mapping 和 residency policy。执行 MERGE INTO 前,应使用显式列和兼容的非 read_only write_mode 定义目标表。
语法¶
MERGE INTO target [AS alias]
USING source [AS alias]
ON expression
[WHEN MATCHED [AND condition] THEN UPDATE SET column = value [, column = value] ...]
[WHEN MATCHED [AND condition] THEN DELETE]
[WHEN NOT MATCHED [AND condition] THEN INSERT [(column [, column] ...)] VALUES (value [, value] ...)]
参数¶
参数 |
说明 |
|---|---|
|
要修改的 Iceberg 表映射。 |
|
其行与目标进行比较的关系。 |
|
决定一行是否匹配的连接条件。 |
|
更新匹配的目标行,要求 |
|
删除匹配的目标行,要求 |
|
插入新行,要求 |
示例¶
运行示例前必须先创建 iceberg_orders 和 incoming_orders。其中 iceberg_orders 必须是可写的 Iceberg 外部表映射。
MERGE INTO iceberg_orders AS t
USING incoming_orders AS s
ON t.order_id = s.order_id
WHEN MATCHED THEN UPDATE SET t.status = s.status, t.total = s.total
WHEN NOT MATCHED THEN INSERT (order_id, status, total) VALUES (s.order_id, s.status, s.total);
限制¶
MERGE INTO不支持RETURNING子句。目标必须是 Iceberg 表映射;不支持合并原生 MatrixOne 表。