Передача параметров в запрос HIVE - PullRequest
0 голосов
/ 25 октября 2018

Я передаю параметр в сценарий HIVE следующим образом, используя параметр --hiveconf, чтобы передать одно значение в запрос HIVE.Есть ли другой способ передать параметры в сценарий HIVE?

beeline -u "${dbconection}" --hiveconf load_id=${loadid} -f /etc/sql/hive_script.sql

hive_script.sql выполняет выбор записей из таблицы a и вставку в таблицу b.

INSERT into TABLE table-b
SELECT column1,
Column2,
Column3,
${hiveconf:loadid} as load_id,
Column5
From table-a;

Яполучая следующее сообщение об ошибке

Error: Failed to open new session: org.apache.hive.service.cli.HiveSQLException: java.lang.IllegalArgumentException: Cannot modify load_id at runtime. It is not in list of params that are allowed to be modified at runtime

Вот то, что установка для замены переменной куста в моей среде.

 set hive.variable.substitute;
+--------------------------------+--+
|              set               |
+--------------------------------+--+
| hive.variable.substitute=true  |
+--------------------------------+--+

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Если вы используете beeline, вам необходимо использовать --hivevar

beeline -u "${dbconection}" --hivevar load_id=${loadid} -f /etc/sql/hive_script.sql

.sql или расширение .hql не будет иметь значения.

И в запросе улья будет использоваться переменная вследующим образом:

INSERT into TABLE table-b
SELECT column1,
Column2,
Column3,
${loadid} as load_id,
Column5
From table-a;
0 голосов
/ 25 октября 2018

Вот то, что я использовал, и оно работает для меня, вместо "--hiveconf" используйте "--hivevar", это будет работать для версии HIVE v0.8.X и выше.

loaded='201810251040'
beeline -u "${dbconection}" --hivevar load_id=${loadid} -f /etc/sql/hive_script.sql

Обновлениеhive_script.sql следующим образом

INSERT into TABLE table-b
SELECT column1,
Column2,
Column3,
${hivevar:load_id} as load_id,
Column5
From table-a;

Это псевдокод ....

0 голосов
/ 25 октября 2018

Во-первых, ваш скрипт улья должен выглядеть следующим образом:

hive_script.hql

INSERT into TABLE '${hiveconf:table_b}'
SELECT column1,
Column2,
Column3,
${hiveconf:loadid} as load_id,
Column5
From '${hiveconf:table_a}';

Затем назовите его следующим образом: hive --hiveconf table_a=employee --hiveconf table_b=department -f hive_script.hql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...