如果您无法使用ACID模式进行更新,MERGE则可以使用FULL OUTER JOIN进行更新。要查找将要更新的所有条目,您需要使用旧数据加入增量数据:insert overwrite target_data [partition() if applicable]SELECT --select new if exists, old if not exists case when i.PK is not null then i.PK else t.PK end as PK,
case when i.PK is not null then i.COL1 else t.COL1 end as COL1,
...
case when i.PK is not null then i.COL_n else t.COL_n end as COL_n
FROM
target_data t --restrict partitions if applicable
FULL JOIN increment_data i on (t.PK=i.PK);
可以通过限制将被覆盖和连接的target_data中的分区来优化它。
此外,如果要使用新数据更新所有列,可以将此解决方案应用于UNION ALL+row_number()