静态分区是插入时对分区字段指定值,动态分区是插入时对分区字段不指定值
动态分区可以通过下面的设置来打开:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
然后代码里就可以这么写:
insert overwrite table tbl_name partition(pt, if_online)
select field1, field2, ..., pt, if_online
from tbl
where xxx;
注意输入字段的最后面必须是动态分区字段。需要在select中查出分区的字段
看一下与静态分区写法的区别:
insert overwrite table tbl_name partition(pt=20121023, if_online=1)
select field1, field2, ..., fieldn
from tbl
where xxx;
不需要在select中查出分区的字段,已指定值
动态分区与静态分区还有一个细微的差别是,静态分区一 定会创建分区,不管SELECT语句的结果有没有数据。而动态分区,只有在SELECT结果的记录数>0的时候,才会创建分区。因此在不同的业务场景下,可能会选择不同的方案。
另外使用动态分