是否可以在hiveconf变量的名称中使用点?
documentation中的所有示例都显示简单的变量名称,例如a
。
如果是:
如何在HQL脚本中引用它? select ${hiveconf:airflow.ctx.dag.dag_id} as dag_id;
会产生语法错误(${hiveconf:abcd}
正常)。
如果不是:
为什么airflow或azkaban将变量传递给像这样的hive脚本?作者难道不知道引用这些变量是不可能的吗?
hive -hiveconf airflow.ctx.dag.dag_id=video-plays-adverts -f test-hiveconf.hql
谢谢!
答案 0 :(得分:1)
检查过,这有效:
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)
可能你忘记了引号。
答案 1 :(得分:0)
事实证明有几个复合问题:
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>)
不支持 - 静态分区需要文字。
故事结束。似乎没有办法使用&#39;计算&#39; (set a = concat(${b}, ${c})
)hiveconf
变量位于常量的位置。