hive向動態分割槽插入資料
阿新 • • 發佈:2019-02-11
向一個定義了分割槽的空表中插入資料,命令如下:
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個分割槽列的值。