往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,比如etl_dt 、dat_dt日期 (格式为yyyyMMdd 或者yyyy-MM-dd这样)。每天落盘的数据会对应hdfs的一个目录。hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称。
1.创建一个单一字段分区表
hive>
create table dpartition(id int ,name string )
partitioned by(ct string );
2.往表里装载数据,并且动态建立分区,以city建立动态分区
hive>
hive.exec.dynamici.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>--查看可知,hive已经完成了以city字段

本文详细介绍了如何在Hive中使用动态分区功能插入数据。通过创建单一和多个字段的分区表,以及静态和动态分区的组合使用,阐述了动态分区的要点和注意事项。强调了查询字段的数量和顺序对于分区的影响,以及不同类型和数量的字段在数据导入时的处理方式。
最低0.47元/天 解锁文章
2326

被折叠的 条评论
为什么被折叠?



