数仓工具—Hive语法之Merge 语句
Merge 语句
Merge 语句经常用在增量数据导入和数据更新的场景,在Merge语句的加持下,我们可以很方便的同时写出写出UPDATE和INSERT语句,也就是我们可以同时更新已经存在的记录和插入新的记录。
MERGE语句经常用在更新缓慢变更维度,需要注意的是有时候update insert 也被称为 UPSERT。
Merge 案例
MERGE语句我们需要指定一个匹配条件,然后可以执行两个操作
- 当source表的记录和目标表记录匹配的时候(一般情况下更新)
- 当source表的记录和目标表记录不匹配的时候(一般情况下插入)
当然我们也可以执行删除操作,下面是一个MERGE 的例子,需要注意的是Hive 从2.2 版本开始才支持MERGE
MERGE INTO merge_demo1 A using merge_demo2 B ON ( A.id = b.id ) WHEN matched THEN UPDATE SET A.lastname = B.lastname WHEN NOT matched THEN INSERT (id, firstname, lastname) VALUES (B.id, B.firstname, B.lastname);
上面的例子中,Merge 语句通过与另外一个数据集(表或试图)关联的结果在结果表上执行了 update 和 insert 。
Merge 语句的替代
如果你的Hive版本不支持MERGE语句,那这个时候我们需要写一个可以同时处理匹配上和为匹配上的一个同等替代的语句