You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delta Lake中如何用MERGE INTO实现类REPLACE INTO的无来源表upsert

Delta Lake 本身没有和 SQLite REPLACE INTO 完全对等的单句简写语法,但可以通过 临时构造单行/多行虚拟数据源 的方式实现不用额外创建实体源表的UPSERT效果,完全匹配你要的手动传值需求。

单条数据手动UPSERT示例

比如要对users表插入/更新userId=123、address='北京市朝阳区'的记录,写法如下:

MERGE INTO users
USING (SELECT 123 AS userId, '北京市朝阳区' AS address) AS updates
ON users.userId = updates.userId
WHEN MATCHED THEN
      UPDATE SET address = updates.address
WHEN NOT MATCHED THEN
      INSERT (userId, address) VALUES (updates.userId, updates.address)

这里的USING子句没有引用任何实体表,而是直接用SELECT语句手动构造了包含目标值的虚拟数据源,完全不需要提前创建updates实体源表。

多条数据批量手动UPSERT示例

如果要一次性传入多条数据,只需要在SELECT里用UNION ALL拼接即可:

MERGE INTO users
USING (
  SELECT 123 AS userId, '北京市朝阳区' AS address
  UNION ALL
  SELECT 456 AS userId, '上海市浦东新区' AS address
  UNION ALL
  SELECT 789 AS userId, '广州市天河区' AS address
) AS updates
ON users.userId = updates.userId
WHEN MATCHED THEN
      UPDATE SET address = updates.address
WHEN NOT MATCHED THEN
      INSERT (userId, address) VALUES (updates.userId, updates.address)

如果使用Delta Lake的Python/Scala API操作,也可以直接构造一个临时DataFrame作为数据源传入,不需要提前持久化成表,灵活度更高。

内容的提问来源于stack exchange,提问作者MetallicPriest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 16:39:01