2016-06-23 10 views

Antwort

11

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.

+0

ich tatsächlich fi Ich habe es schon lange ausprobiert, aber nette Antwort, Danke! – Karnimrod

+0

Ich dachte, du hättest wahrscheinlich, aber ich entschied mich, eine weitere Antwort für zukünftige Leser einzureichen, nur für den Fall. =] –

1

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.

5

@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