:-hivevarと-hiveconfの違いは何ですか?ハイブ-hから
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
:-hivevarと-hiveconfの違いは何ですか?ハイブ-hから
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
ドキュメントの例が適切であるとは思えませんでした。答え。
最初は--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
名前空間でユーザー変数を設定すると、おそらく何も破損することはありませんが、推奨されません。
名前空間以外には違い。 hiveconf
とhivevar
は異なる名前空間です。 hivevar
namespaceは、構成プロパティーnamespaceとHive変数の名前空間を分離するために追加されました。詳細については、https://issues.apache.org/jira/browse/HIVE-2020を参照してください。
あなたは変数のための3つの名前空間があります差延
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution
のためにこれを参照することができます - hiveconf、システム、およびenvが。 (Custom variablesは、Hive 0.8.0以降のリリースでdefineまたはhivevarオプションを使用して別の名前空間に作成することもできます)
@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
私は実際Fiの長い時間前にそれを試したが、素敵な答え、ありがとう! – Karnimrod
私はおそらくあなたが持っていると思っていましたが、私は将来の読者のために別の答えを提出することにしました。 =] –