hive向动态分区插入数据

向一个定义了分区的空表中插入数据,命令如下:

insert overwrite table t_name
partition (par_1)
select t1.field1 as field1, t1.field2 as field2,  t1.field3 as par_1
from (
select * from t3 where par_2=value2) t1 
 where t1.field1 not in (select field1from t2) ;

结果如下错误:
这里写图片描述

大概的意思是,在动态分区‘strict’模式下至少需要有一个’strict’列,可以通过设置hive.exec.dynamic.partition.mode=nonstrict来关闭’strict’模式。
至少需要一个’strict’分区列是指至少有一个分区列有至少一个值。
做如下设置:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=1000;

运行成功。
set hive.exec.dynamic.partition.mode的设置貌似是一次性的,我自己使用的结果是设置完,跑一次插入之后,下一次对新的空动态分区表做插入,又报同样的错误,又设置一次之后,运行成功。

需要注意的是,系统自动将最后partition后的select中的最后n个字段作为n个分区列的值。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值