2017-03-29 10 views
0

hiveconf変数の名前にドットを使用することはできますか?Hiveconf/hivevar:変数名にドット( '。')を付けることは可能ですか?

documentationのすべての例は、aのような単純な変数名を示しています。

はい:

私はHQLスクリプトでそれを参照する方法を教えてください。 select ${hiveconf:airflow.ctx.dag.dag_id} as dag_id;は構文エラーを生成します(${hiveconf:abcd}はokです)。

何もしない:

なぜ、このようなハイブスクリプトにairflowまたはazkabanパス変数のでしょうか?著者は、これらの変数を参照することは不可能であることを知っていませんか?

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

ありがとう!

答えて

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) 

は、おそらくあなたが引用符を忘れてしまいました。

+0

ありがとうございます - 私の文脈ではありませんが(静的パーティションを扱っています)。そして重要なことは、 'hiveconf'がマクロシステムのように振る舞うということです。 –

+0

はい、マクロです。 hiveconf変数は引き続き使用できますが、複雑な式ではなく簡単な値として使用できます。ラッパーシェルで計算する – leftjoin

0

それはいくつかの化合物の問題があったが判明:

1)CマクロシステムとしてHivevars仕事は - あなたが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>) 

- 静的パーティションが必要リテラル。

ストーリーの終わり。定数の場所に 'calculated'(set a = concat(${b}, ${c})hiveconf変数を使用する方法がないようです。

関連する問題