背景
现在, Hive我们需要做一个全量的更新, 对于之前的分区的中的数据我们要进行查询 -> 修改 -> 覆盖操作, 对于新分区的数据需要做到将符合条件的数据进行插入, 之前的数据通过id得到.
如下图:
在这种情况下, 我们希望dt=3的数据放到今天的分区中, 之前的数据去对应的分区进行更新. 可以使用动态分区来完成
语法
insert [overwrite] table test1 partition(dt)
select a , 具体分区 from test
举个例子, 我们上面的表可以写成
insert overwrite table test3 partition(dt)
select
if(test1.id is null, test2, test1)
-- 按照天来分区,必须加上这一字段, 因为动态分区也需要指定分区,
-- 而select的最后一个字段就是与从来指定动态分区的分区规则的
date_format(if(test1.dt is null, test2, test1), 'yyyy-MM-dd')
from test1
full outer join test2
on test1.id=test2.id
这样就避免了我们执行很多次的SQL. 加快了开发效率