Hiveconf / hivevar:可能在变量名中有一个点('。')?

时间:2017-03-29 13:34:15

标签: hive hiveql airflow

是否可以在hiveconf变量的名称中使用点?

documentation中的所有示例都显示简单的变量名称,例如a

如果是:

如何在HQL脚本中引用它? select ${hiveconf:airflow.ctx.dag.dag_id} as dag_id;会产生语法错误(${hiveconf:abcd}正常)。

如果不是:

为什么airflowazkaban将变量传递给像这样的hive脚本?作者难道不知道引用这些变量是不可能的吗?

hive -hiveconf airflow.ctx.dag.dag_id=video-plays-adverts -f test-hiveconf.hql

谢谢!

2 个答案:

答案 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变量位于常量的位置。