Von hive h:Was ist der Unterschied zwischen -hivevar und -hiveconf?
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
Von hive h:Was ist der Unterschied zwischen -hivevar und -hiveconf?
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
Ich hatte nicht das Gefühl, dass die Beispiele aus der Dokumentation ausreichend waren, also hier ist mein Versuch eine Antwort.
Am Anfang gab es nur --hiveconf
und Variablensubstitution gab es nicht.
Die Option --hiveconf
erlaubt Benutzern Hive configuration values von der Kommandozeile aus einzustellen, und das war es. Alle Hive-Konfigurationswerte werden unter dem Namespace hiveconf
, d. H. hiveconf:mapred.reduce.tasks
, gespeichert. Mit diesen Werten können Sie beispielsweise die Anzahl der Mapper und Reducer steuern, ob Statusmeldungen angezeigt werden sollen und ob das Skript bei Fehlern weiterlaufen soll.
Später, variable substitution was added. Dies bedeutet, dass Sie jetzt Variablen in Abfragen mit der Syntax ${...}
verwenden können. Die einzigen Variablen, die Sie über die Befehlszeile festlegen konnten, waren jedoch unter dem hiveconf
-Namespace, der --hiveconf
verwendet, also wo Benutzer ihre Variablen einfügen.
Wenn Sie Ihre persönlichen Variablen unter den Hive-Konfigurations-Namespace stellen, wird das wahrscheinlich nichts kaputt machen, aber es ist auch keine gute Form. Später, it was suggested, dass ein hivevar
Namespace speziell für Benutzervariablen hinzugefügt werden, die auch in der Befehlszeile mit --hivevar
definiert werden konnte. Dies bedeutete eine sauberere Trennung zwischen Hive-Konfigurationswerten und benutzerdefinierten Variablen.
Zusammengefasst:
Der hiveconf
Namespace und --hiveconf
verwendet werden soll Hive Konfigurationswerte zu setzen.
Der Namespace hivevar
und --hivevar
sollten verwendet werden, um Benutzervariablen zu definieren.
Die Einstellung von Benutzervariablen unter dem hiveconf
Namespace wird wahrscheinlich nichts brechen, wird aber nicht empfohlen.
Kein Unterschied außer dem Namensraum. hiveconf
und hivevar
sind unterschiedliche Namespaces. Der Namespace hivevar
wurde hinzugefügt, um den Namespace der Konfigurationseigenschaften Namespace und Hive-Variablen zu trennen. Weitere Informationen finden Sie unter https://issues.apache.org/jira/browse/HIVE-2020.
Sie können diese für die differance siehe
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution
Es gibt drei Namensräume für Variablen - hiveconf, System und env. (Custom variables kann auch in einem separaten Namespace mit der Option define oder hivevar in Hive 0.8.0 und späteren Versionen erstellt werden.)
@Llama hat es ausführlich erklärt, zusammen mit dem beide Arten von Variablen unterschiedlich zugegriffen werden.
Die --hivevar
Variablen werden unter Verwendung von ${var-name}
zugegriffen, während auf die --hiveconf
${hiveconf:var-name}
innerhalb des Stocks zugegriffen wird.
z.B. Unterhalb von Beispielen greifen Sie auf die Variable zu und drucken Sie ihren Wert in der Struktur.
hivevar:
hive --hivevar a='this is a' -e '!echo ${a};'
Ausgang: this is a
hiveconf:
hive --hiveconf a='this is a' -e '!echo ${hiveconf:a};'
Ausgabe: this is a
ich tatsächlich fi Ich habe es schon lange ausprobiert, aber nette Antwort, Danke! – Karnimrod
Ich dachte, du hättest wahrscheinlich, aber ich entschied mich, eine weitere Antwort für zukünftige Leser einzureichen, nur für den Fall. =] –