Вам нужно использовать специальный hiveconf для подстановки переменных. например
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'
аналогично вы можете передать командную строку:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
Обратите внимание, что есть также переменные env и системные , поэтому вы можете ссылаться, ${env:USER}
например.
Чтобы увидеть все доступные переменные, из командной строки запустите
% hive -e 'set;'
или из подсказки улья запустите
hive> set;
Обновление:
я также начал использовать переменные hivevar , помещая их в фрагменты hql, которые я могу включить из интерфейса source
командной строки hive с помощью команды (или передать как параметр -i из командной строки). Преимущество здесь в том, что переменная может затем использоваться с префиксом hivevar или без него, и разрешать что-то вроде глобального и локального использования.
Итак, предположим, что у вас есть файл setup.hql, который устанавливает переменную tablename:
set hivevar:tablename=mytable;
тогда я могу внести в улей:
hive> source /path/to/setup.hql;
и использовать в запросе:
hive> select * from ${tablename}
или
hive> select * from ${hivevar:tablename}
Я также мог бы установить "локальное" имя таблицы, что повлияет на использование $ {tablename}, но не $ {hivevar: tablename}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
против
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
Вероятно, это не слишком много значит для CLI, но может иметь hql в файле, который использует исходный код , но установить некоторые переменные «локально» для использования в остальной части скрипта.