========================================================
create table dpartition(id int,name string) partitioned by(dt string); --创建分区表
set hive.exec.dynamic.partition=true; --开启动态分区,默认是false
set hive.exec.dynamic.partition.mode=nonstrict; --开启允许所有分区都是动态的,否则必须要有静态分区才能使用
create table b(id int,name string,dt string) row format delimited fields terminated by ','; --创建中间表
insert overwrite table dpartition partition(dt) select id ,name,dt from b; --覆盖插入到分区表,更新指定时间戳,需要在分区字段指定相应时间,可动态更新
=========================================================
dpartition (动态分区表)
1,zhangsan,20180201
2,lisi,20180201
3,wangwu,20180201
4,zhaoliu,20180202
5,tianqi,20180202
6,qiangqiang,20180202
7,minging,20180203
8,xiaogang,20180203
9,langlang,20180203
例如dpartition表中原有20180201,20180202,20180203三天数据表中原有20180201,20180202,20180203三天数据
-------------------------------
B(待插入表)
1,one,20180201
2,two,20180201
3,three,20180201
7,four,20180203
8,five,20180203
9,six,20180203
10,liuliu,20180204
11,dada,20180204
insert overwrite table dpartition partition(dt) select id ,name,dt from B; --动态覆盖插入分区表
------------------------------
dpartition(动态分区表) 结果
1,one,20180201
2,two,20180201
3,three,20180201
4,zhaoliu,20180202
5,tianqi,20180202
6,qiangqiang,20180202
7,four,20180203
8,five,20180203
9,six,20180203
10,liuliu,20180204
11,dada,20180204
此时会发现20180201被更新,20180202不变(因为分区,不受覆盖影响),20180203被更新,20180204新增