Подтвердить что ты не робот

В чем разница между -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
4b9b3361

Ответ 1

Я не совсем понял, что примеры из документации были адекватными, поэтому я попытался ответить.

В начале было только --hiveconf, а замена переменных не существовала.

Параметр --hiveconf разрешил пользователям устанавливать значения конфигурации улья из командной строки и все. Все значения конфигурации улья хранятся в пространстве имен hiveconf, т.е. hiveconf:mapred.reduce.tasks. Эти значения позволили вам управлять такими вещами, как количество карт и редукторов, если сообщения о состоянии должны отображаться, а если script должен продолжаться при ошибках.

Позже была добавлена ​​замена . Это означало, что теперь вы можете использовать переменные в запросах с синтаксисом ${...}. Тем не менее, единственные переменные, которые вы могли установить из командной строки, находились в пространстве имен hiveconf, используя --hiveconf, чтобы пользователи помещали свои переменные.

Помещение ваших личных переменных в пространство имен конфигурации Hive, вероятно, ничего не сломает, но это также не очень хорошая форма. Позже было предложено, чтобы пространство имен hivevar было добавлено специально для пользовательских переменных, которые также можно было определить в командной строке с помощью --hivevar. Это означало более чистое разделение между значениями конфигурации улья и пользовательскими переменными.

Вкратце:
Пространство имен hiveconf и --hiveconf должно использоваться для установки значений конфигурации Hive.
Пространство имен hivevar и --hivevar должно использоваться для определения пользовательских переменных.
Установка пользовательских переменных в пространстве имен hiveconf, вероятно, ничего не сломает, но не рекомендуется.

Ответ 2

@Llama объяснила это подробно, наряду с тем, что оба типа переменных доступны по-разному.

Доступ к переменным --hivevar осуществляется с помощью ${var-name}, а к --hiveconf - к ${hiveconf: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

Ответ 3

Никакой разницы, кроме пространства имен. hiveconf и hivevar - разные пространства имен. Пространство имен hivevar было добавлено просто для разделения пространства имен свойств и пространства имен переменных. Подробнее см. https://issues.apache.org/jira/browse/HIVE-2020.

Ответ 4

Вы можете указать это для разницы

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution

Существует три пространства имен для переменных - hiveconf, system и env. (Пользовательские переменные также могут быть созданы в отдельном пространстве имен с опцией define или hivevar в версиях Hive 0.8.0 и более поздних версий.)

Ответ 5

В дополнение к вышесказанному, мы также можем использовать их в начале скрипта как:

hiveconf:

SET this_dt = CURRENT_DATE;
select ${hiveconf:this_dt};

hivevar:

set hivevar:cur_dt=current_date;
select ${hivevar:cur_dt};