2016-06-23 22 views

答えて

11

ドキュメントの例が適切であるとは思えませんでした。答え。

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

--hiveconfオプションを使用すると、ユーザーはコマンドラインからHive configuration valuesを設定することができました。すべてのHive設定値は、hiveconf名前空間、つまりhiveconf:mapred.reduce.tasksに格納されます。これらの値を使用すると、マッパーやレデューサーの数、ステータスメッセージを表示する必要がある場合、エラーが発生した場合にスクリプトを続行するかどうかなどを制御できます。

後で、variable substitution was added。つまり、${...}構文のクエリで変数を使用できるようになりました。しかし、コマンドラインから設定できる唯一の変数は、--hiveconfを使用してhiveconf名前空間の下にあったため、ユーザーが変数を置く場所です。

個人用変数をHive構成ネームスペースに置くと、おそらく何も破損することはありませんが、それは良い形式ではありません。後でit was suggested を使用してコマンドラインで定義することもできるユーザー変数用に特別な名前空間が追加されることがあります(hivevar)。これは、Hive構成値とユーザー定義変数の間のより明確な分離を意味しました。

要約
hiveconf名前空間と--hiveconfはハイブ設定値を設定するために使用されるべきです。
名前空間と--hivevarは、ユーザー変数を定義するために使用する必要があります。
hiveconf名前空間でユーザー変数を設定すると、おそらく何も破損することはありませんが、推奨されません。

+0

私は実際Fiの長い時間前にそれを試したが、素敵な答え、ありがとう! – Karnimrod

+0

私はおそらくあなたが持っていると思っていましたが、私は将来の読者のために別の答えを提出することにしました。 =] –

1

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

5

@Llamaは詳細に説明しましたが、両方のタイプの変数には異なるアクセスがあります。 --hiveconfはハイブ内部${hiveconf:var-name}にアクセスしている間

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

下記の例は、変数にアクセスし、ハイブでその値を表示します。

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

関連する問題