Hive 传递到分区的参数在配置单元中不起作用

Hive 传递到分区的参数在配置单元中不起作用,hive,hiveql,Hive,Hiveql,我想把分区值作为参数传递 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

我想把分区值作为参数传递

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无法识别“date_sub”(常量中的“current_date”)附近的输入 create_dt是日期数据类型

请帮帮我

提前感谢。

1 配置单元变量只是一种文本替换机制。
替换在解析和执行之前完成

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
2 使用动态分区

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};

您得到了答案,但无论如何WHERE子句毫无意义(
WHERE a.create_dt in(…)和a.create_dt=${hiveconf:runmdt}
)非常感谢您的帮助。不客气。请确保接受答案(在答案左侧标记
V
符号)