Od ula -h:Jaka jest różnica między -hivevar i -hiveconf?
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
Od ula -h:Jaka jest różnica między -hivevar i -hiveconf?
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
Nie bardzo czułem, że przykłady z dokumentacji były odpowiednie, więc oto moja próba Odpowiedź.
Na początku było tylko --hiveconf
, a zmienna substytucja nie istniała.
Opcja --hiveconf
pozwoliła użytkownikom ustawić Hive configuration values z wiersza poleceń i to było to. Wszystkie wartości konfiguracji Hive są przechowywane w przestrzeni nazw hiveconf
, tj. hiveconf:mapred.reduce.tasks
. Te wartości pozwoliły ci kontrolować takie rzeczy, jak liczba mapperów i reduktorów, czy powinny być wyświetlane komunikaty o stanie i czy skrypt powinien kontynuować błędy.
Później, variable substitution was added. Oznaczało to, że możesz teraz używać zmiennych w zapytaniach ze składnią ${...}
. Jednak jedyne zmienne, które można ustawić z wiersza poleceń, znajdowały się pod obszarem nazw hiveconf
przy użyciu --hiveconf
, więc tam użytkownicy umieszczają swoje zmienne.
Umieszczenie zmiennych osobistych w obszarze nazw konfiguracji Hive prawdopodobnie niczego nie złamie, ale to także nie jest dobra forma. Później, it was suggested, dodawana jest przestrzeń nazw hivevar
specjalnie dla zmiennych użytkownika, które mogą być również zdefiniowane w wierszu poleceń przy użyciu --hivevar
. Oznaczało to czystszą separację między wartościami konfiguracyjnymi Hive a zmiennymi zdefiniowanymi przez użytkownika.
Podsumowując:
hiveconf
nazw i --hiveconf
powinien być używany do ustawiania Hive wartości konfiguracyjnych.
Przestrzeń nazw hivevar
i --hivevar
powinny być używane do definiowania zmiennych użytkownika.
Ustawienie zmiennych użytkownika w obszarze nazw hiveconf
prawdopodobnie niczego nie złamie, ale nie jest zalecane.
No różnica oprócz nazw. hiveconf
i hivevar
to różne przestrzenie nazw. hivevar
Przestrzeń nazw została dodana tylko do oddzielnej przestrzeni nazw właściwości konfiguracji i przestrzeni nazw zmiennych Hive. Aby uzyskać więcej informacji, patrz https://issues.apache.org/jira/browse/HIVE-2020.
można odwołać się do tego differance
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution
Istnieją trzy przestrzenie nazw dla zmiennych - hiveconf, system i env. (Custom variables można również utworzyć w osobnej przestrzeni nazw za pomocą opcji define lub hivevar w wydaniu Hive 0.8.0 i nowszych).
@Llama wyjaśnił to szczegółowo, wraz z tym, że oba typy zmiennych są dostępne w różny sposób.
W --hivevar
zmienne są dostępne przy użyciu ${var-name}
, a --hiveconf
są dostępne ${hiveconf:var-name}
wewnątrz ula.
np. Poniżej przykłady zmiennych dostępowych i wydrukuj ich wartość w ulu.
hivevar:
hive --hivevar a='this is a' -e '!echo ${a};'
wyjściowa: this is a
hiveconf:
hive --hiveconf a='this is a' -e '!echo ${hiveconf:a};'
wyjściowa: this is a
I rzeczywiście fi ustał to dawno temu, ale miła odpowiedź, dzięki! – Karnimrod
Sądziłem, że prawdopodobnie tak, ale postanowiłem złożyć kolejną odpowiedź dla przyszłych czytelników, na wszelki wypadek. =] –