分区表数据加载--动态分区
往hive分区表中插入加载数据时,如果需要创建的分区很多,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。
所谓动态分区指的是分区的字段值是基于查询结果自动推断出来的。核心语法就是insert+select。
启用hive动态分区,需要在hive会话中设置两个参数:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
第一个参数表示开启动态分区功能,第二个参数指定动态分区的模式。分为nonstick非严格模式和strict严格模式。strict严格模式要求至少有一个分区为静态分区。
创建一张新的分区表t_all_hero_part_dynamic
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 (fdm_sor)> show partitions dpartition; partition ct=beijing ct=beijing1 ———————————————— 本文为博主原创文章,属博主老婆资产,故未经博主老婆允许不得转载。 原文链接:https://blog.csdn.net/qq_26442553/article/details/80382174
标签:分区,partition,hive,插入,字段,分区表,动态 From: https://www.cnblogs.com/mengbin0546/p/18019868