1. 程式人生 > >hive向動態分割槽插入資料

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個分割槽列的值。