























MERGE INTO target
USING source
ON source.a = target.a
WHEN MATCHED THEN
UPDATE SET a = source.a, b = source.b, c = source.c
WHEN NOT MATCHED THEN
INSERT (a, b, c) values (a, b, c)
merge into 实际上是一个语法糖, 相对应的语义也可以通过其他的 sql 语法来表达, 例如 UPDATE/DELETE/INSERT, 但是 merge into 的好处是本身一次事务, 因此可以原子性的完成多个修改的操作.
在 Paimon 中, 主键表和非主键表提供了不同的 merge into 实现方式.

处理流程
为什么需要第一次 inner join?
当 Matched Action 中涉及对原始文件的修改需求, 例如 merge action 中存在 UPDATE 或 DELETE 子句时, 就有两种方式
显然, 在小范围更新的场景下, 第二种方式会更加合适, 可以减少重写文件的数量, 降低存储放大.
为什么需要将 non touched splits 也纳入到计算中?
因为有 WHEN NOT MATCHED 这类 not matched by source/target 时, 就需要将 inner join 未匹配上的数据也参与计算才能使得 WHEN NOT MATCHED 条件判断准确.
劣势:
优势:

优势

主键表的流程和上面的流程其实很像, 因为本身主键表就有更新删除能力, 因此构建出变更行后直接写回主键表即可.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。