hiveconf/hivevar:变量名中可能有点('.')?

cwxwcias  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(501)

是否可以在hiveconf变量的名称中使用点?
文档中的所有示例都显示了简单的变量名,如 a .
如果是:
如何在hql脚本中引用它? select ${hiveconf:airflow.ctx.dag.dag_id} as dag_id; 产生语法错误(while ${hiveconf:d} 是可以的)。
如果没有:
为什么airflow或azkaban会像这样向配置单元脚本传递变量?难道作者不知道引用这些变量是不可能的吗? hive -hiveconf airflow.ctx.dag.dag_id=video-plays-adverts -f test-hiveconf.hql 谢谢!

fwzugrvs

fwzugrvs1#

已经检查过了,这是有效的:

set hiveconf:airflow.ctx.dag.dag_id=abc;
hive> select '${hiveconf:airflow.ctx.dag.dag_id}';
OK
abc
Time taken: 0.212 seconds, Fetched: 1 row(s)

可能你忘了引号。

niwlg2el

niwlg2el2#

结果发现有几个复杂的问题:
1) hivevars作为一个c宏系统工作-当您指定 set a = concat('-', ${hiveconf:var_name}) ,内容 ${hiveconf:a} 不是字符串,而是命令 concat('-', ${hiveconf:var_name}) 每次使用它都会得到评估。
2) 我在静态分区中使用它,它只接受文本,所以:

INSERT OVERWRITE TABLE xyz 
PARTITION (year=${hiveconf:y}, month=${hiveconf:m}, week=${hiveconf:w}, day=${hiveconf:d})

翻译成这样:

INSERT OVERWRITE TABLE xyz
PARTITION (year=<complex expression>, month=<complex expression>, week=<complex expression>, day=<complex expression>)

不支持静态分区-静态分区需要文本。
故事结束了。似乎没有办法使用“computed”( set a = concat(${b}, ${c}) ) hiveconf 常量位置的变量。

相关问题