1.创建一个单一字段分区表
hive> create table dpartition(id int ,name string )
partitioned by(ct string );
2.往表里装载数据,并且动态建立分区,以city建立动态分区
hive> set hive.exec.dynamic.partition=true; #开启动态分区,默认是false
set hive.exec.dynamic.partition.mode=nonstrict; #开启允许所有分区都是动态的,否则必须要有静态分区才能使用。
insert overwrite table dpartition
partition(ct)
select id ,name,city from mytest_tmp2_p;
要点:因为dpartition表中只有两个字段,所以当我们查询了三个字段时(多了city字段),所以系统默认以最后一个字段city为分区名,因为分区表的分区字段默认也是该表中的字段,且依次排在表中字段的最后面。所以分区需要分区的字段只能放在后面,不能把顺序弄错。如果我们查询了四个字段的话,则会报错,因为该表加上分区字段也才三个。要注意系统是根据查询字段的位置推断分区名的,而不是字段名称。
--查看可知,hive已经完成了以city字段为分区字段,实现了动态分区。
hive > show partitions dpartition;
partition
ct=beijing
ct=beijing1
注意:使用,insert...select 往表中导