往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。
1.创建一个单一字段分区表
1 hive>
2 create table dpartition(id int ,name string )
3 partitioned by(ct string );
2.往表里装载数据,并且动态建立分区,以city建立动态分区
1 hive>
2 hive.exec.dynamici.partition=true; #开启动态分区,默认是false
3 set hive.exec.dynamic.partition.mode=nonstrict; #开启允许所有分区都是动态的,否则必须要有静态分区才能使用。
4 insert overwrite table dpartition
5 partition(ct)
6 select id ,name,city from mytest_tmp2_p;
7
8 要点:因为dpartition表中只有两个字段,所以当我们查询了三个字段时(多了city字段),所以系统默认以最后一个字段city为分区名ÿ