首页/数据/数仓建模速查/Upsert 与 MERGE:主键最新态写入
分层与规范64 条

Upsert 与 MERGE:主键最新态写入

需要保留主键最新状态时用 MERGE:匹配则更新、不匹配则插入;Hive ACID 与 MPP 引擎语法接近但限制不同,注意分区条件与并发。

数仓建模速查数据更新于 2026-10-12
场景主键最新态
语法MERGE INTO ... WHEN MATCHED
引擎Hive ACID / Doris Unique
注意分区条件与并发

MERGE 示例

MERGE 示例
MERGE INTO dim_customer AS t
USING stg_customer AS s
ON t.customer_id = s.customer_id
WHEN MATCHED AND s.update_time > t.update_time THEN UPDATE SET
  t.customer_name = s.customer_name,
  t.update_time   = s.update_time
WHEN NOT MATCHED THEN INSERT (customer_id, customer_name, update_time)
VALUES (s.customer_id, s.customer_name, s.update_time);
MERGE 在大分区表上扫描成本高,能按分区先过滤就先过滤。

易错点

  • 条件写成 update_time >= 导致同批次反复更新

数据来源与参考

  • Apache Hive 官方文档:Merge
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌