hql存储过程中只有set变量等于常数才能给分区变量赋值?

HQL文件:

set hive.strict.checks.type.safety=false;
set hive.mapred.mode=nonstrict;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
--昨天
set last_d=regexp_replace(date_add(current_date(),-1),'-','');
--CLNDR_DT_ID是表TABLE_NAME的分区字段
insert overwrite table TABLE_NAME partition (CLNDR_DT_ID=${hiveconf:last_d})
select XXXXX
from T

报错:cannot recognize input near 'regexp_replace''(''data_add' in constant.
但我测试了下如果set last_d='20220426'这种常数就可以跑通了。
不知道是什么原因?


自己找到了
insert overwrite table T partition (clndr)
select xxx,${hiveconf:clndr}
from X
参见
https://blog.csdn.net/qq_4368...
个人理解:
静态分区写法
insert overwrite table T partition (clndr='20220428')
select xxx
from X
动态分区的写法
insert overwrite table T partition (clndr)
select xxx,${hiveconf:clndr}
from X

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏