2017-07-03 17 views
0

我想將分區值作爲參數傳遞。傳遞給分區的參數在配置單元中不起作用

SET runmdt = date_sub(current_date,5); 

以下查詢工作正常。

SELECT 
cal_id,caller_name,location 
from 
amobe_tbl a 
WHERE a.create_dt IN 
(select DISTINCT create_dt from mt_call 
WHERE create_dt between date_sub(current_date,20) and current_date) 
and a.create_dt=${hiveconf:runmdt}; 

當插入分區表它不工作。

SET runmdt = date_sub(current_date,5); 
INSERT OVERWRITE TABLE amobe_tbl PARTITION (create_dt=${hiveconf:runmdt}) 
SELECT 
cal_id,caller_name,location 
from 
amobe_tbl a 
WHERE a.create_dt IN 
(select DISTINCT create_dt from mt_call 
WHERE create_dt between date_sub(current_date,20) and current_date) 
and a.create_dt=${hiveconf:runmdt}; 

失敗:ParseException的線1:92不能在不斷 create_dt識別輸入的附近 'DATE_SUB' '(' 'CURRENT_DATE' 是日期型數據

請幫我在

感謝。提前。

+0

你有你的答案,但在任何情況下,WHERE子句是沒有意義的('WHERE a.create_dt IN(...)和。 create_dt = $ {hiveconf:runmdt}') –

回答

0

蜂巢變量都不過是一個文本替換機制。
更換在解析和執行之前完成。

hive> set hivevar:v1=se; 
hive> set hivevar:v2=l; 
hive> set hivevar:v3=ec; 
hive> set hivevar:v4=t 1+; 
hive> set hivevar:v5=2; 
hive> ${hivevar:v1}${hivevar:v2}${hivevar:v3}${hivevar:v4}${hivevar:v5}; 
OK 
3 

使用動態分區

set hive.exec.dynamic.partition.mode=nonstrict; 

SET runmdt = date_sub(current_date,5); 
INSERT OVERWRITE TABLE amobe_tbl PARTITION (create_dt) 
SELECT 
cal_id,caller_name,location,${hiveconf:runmdt} 
from 
amobe_tbl a 
WHERE a.create_dt IN 
(select DISTINCT create_dt from mt_call 
WHERE create_dt between date_sub(current_date,20) and current_date) 
and a.create_dt=${hiveconf:runmdt}; 
+0

非常感謝您的幫助 – Rock

+0

不客氣。請確保接受答案(通過標記答案旁邊的'V'符號) –

相關問題