web-dev-qa-db-ja.com

-hivevarと-hiveconfの違いは何ですか?

Hive -hから:

--hiveconf <property=value>   Use value for given property
--hivevar <key=value>         Variable subsitution to apply to Hive
                                  commands. e.g. --hivevar A=B
22
Karnimrod

ドキュメントの例が適切であるとは思わなかったので、回答を試みました。

最初は--hiveconfしかなく、変数置換は存在しませんでした。

--hiveconfオプションを使用すると、ユーザーはコマンドラインから Hive構成値 を設定できました。すべてのHive設定値は、hiveconf名前空間、つまりhiveconf:mapred.reduce.tasksの下に保存されます。これらの値を使用すると、ステータスメッセージを表示するかどうか、およびエラー時にスクリプトを続行するかどうかなど、マッパーとリデューサーの数などを制御できます。

後で、 変数置換が追加されました 。これは、${...}構文のクエリで変数を使用できるようになったことを意味します。ただし、コマンドラインから設定できる変数は--hiveconfを使用してhiveconf名前空間の下にあるため、ユーザーが変数を入力する場所です。

Hive構成名前空間の下に個人変数を配置しても、おそらく何も壊れませんが、それはまた良い形ではありません。後で 推奨hivevar名前空間は、--hivevarを使用してコマンドラインでも定義できるユーザー変数専用に追加されます。これは、Hive構成値とユーザー定義変数の明確な分離を意味しました。

要約:
hiveconf名前空間と--hiveconfを使用して、Hive構成値を設定する必要があります。
hivevar名前空間と--hivevarを使用して、ユーザー変数を定義する必要があります。
hiveconf名前空間の下でユーザー変数を設定しても、おそらく何も壊れませんが、お勧めしません。

40
Mr. Llama

@Llamaは、両方のタイプの変数へのアクセス方法が異なることとともに、詳細に説明しています。

--hivevar変数は${var-name}を使用してアクセスされ、--hiveconfはHive内で${hiveconf:var-name}にアクセスされます。

例えば以下の例では、変数にアクセスし、その値をHiveに出力します。

hivevar:

Hive --hivevar a='this is a' -e '!echo ${a};'

出力:this is a

hiveconf:

Hive --hiveconf a='this is a' -e '!echo ${hiveconf:a};'

出力:this is a

9
Rahul Sharma

名前空間以外の違いはありません。 hiveconfhivevarは異なる名前空間です。 hivevar名前空間は、構成プロパティの名前空間とHive変数の名前空間を分離するためだけに追加されました。詳細については、 https://issues.Apache.org/jira/browse/Hive-202 を参照してください。

0
leftjoin

差異についてはこれを参照できます

https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution

変数には、hiveconf、system、envの3つの名前空間があります。 ( カスタム変数 は、Hive 0.8.0以降のリリースのdefineまたはhivevarオプションを使用して、別のネームスペースに作成することもできます。)

0
charan tej

スクリプトの冒頭で次のように使用することもできます。

hiveconf:

SET this_dt = CURRENT_DATE;
select ${hiveconf:this_dt};

hivevar:

set hivevar:cur_dt=current_date;
select ${hivevar:cur_dt};
0
RPaul