Как использовать переменные в улье?

Я пытаюсь использовать переменные в своем сценарии Hive. Но почему-то не работает.

SET $app_count=select max(app_id) from app_table;
SELECT '${hiveconf:app_count}',app_name,ROW_NUMBER() OVER (ORDER BY app_name) FROM new_apps;

Выход

_c0   app_name    _wcol0
      app1          1
      app2          2
      app3          3

Ожидаемый результат: скажем, max(app_id) из другой таблицы равен 10

_c0   app_name    _wcol0
 10    app1         1
 10    app2         2
 10    app3         3

Не уверен, почему значение переменной не заменяется в запросе. Я даже использовал настройку

'установить hive.variable.substitute=true;' . Но это не внесло никаких изменений. Заранее спасибо. Любое альтернативное решение также приветствуется.


person dheee    schedule 20.09.2015    source источник
comment
Риторический вопрос: понимаете ли вы, что означает $ при манипулировании переменной в сценарии Unix или сценарии Hive? -- подсказка: это не то же самое, что в Microsoft PowerShell :-/   -  person Samson Scharfrichter    schedule 21.09.2015
comment
Еще один риторический вопрос: вы пытались проверить, что на самом деле хранит в переменной команда SET? И вы ожидали, что SET выполнит что-то или просто сохранит буквальное значение?   -  person Samson Scharfrichter    schedule 21.09.2015
comment
@SamsonScharfrichter Я запускаю этот скрипт Hive в Azure powershell, я не уверен, имеет ли это значение. Я даже пытался использовать 'SET count = query;' . Я пытаюсь присвоить результат запроса переменной и использовать ее в своем следующем запросе.   -  person dheee    schedule 21.09.2015
comment
@user3267086 user3267086 Это все еще открытая задача JIRA в улье. HIVE-2165 — это номер JIRA. Попробуйте реализовать описанное выше, используя сам язык запросов Hive.   -  person madhu    schedule 21.09.2015
comment
@madhu Я не знаю, как реализовать это на языке запросов Hive. Если у вас есть альтернативное решение. не могли бы вы опубликовать это. Спасибо   -  person dheee    schedule 21.09.2015


Ответы (1)


Просто сохраните результат этого запроса в другой таблице (тесте) с одним столбцом app_id.

select max(app_id) from app_table

Затем вы можете использовать следующий запрос:

select test.app_id,new_apps.app_name,ROW_NUMBER() OVER (ORDER BY new_apps.app_name) FROM new_apps join test;
person madhu    schedule 24.09.2015