Você precisa usar o hiveconf especial para substituição de variável. por exemplo
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'
da mesma forma, você pode passar a linha de comando:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
Observe que também existem variáveis env e sistema , portanto, você pode fazer referência, ${env:USER}
por exemplo.
Para ver todas as variáveis disponíveis, na linha de comando, execute
% hive -e 'set;'
ou a partir do prompt do hive, execute
hive> set;
Atualização:
comecei a usar variáveis hivevar também, colocando-as em fragmentos hql que posso incluir da CLI do hive usando o source
comando (ou passar como a opção -i da linha de comando). O benefício aqui é que a variável pode então ser usada com ou sem o prefixo hivevar e permitir algo semelhante ao uso global versus local.
Portanto, suponha que haja algum setup.hql que defina uma variável tablename:
set hivevar:tablename=mytable;
então, posso trazer para a colmeia:
hive> source /path/to/setup.hql;
e usar na consulta:
hive> select * from ${tablename}
ou
hive> select * from ${hivevar:tablename}
Eu também poderia definir um tablename "local", o que afetaria o uso de $ {tablename}, mas não de $ {hivevar: tablename}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
vs
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
Provavelmente não significa muito da CLI, mas pode ter hql em um arquivo que usa o código-fonte , mas defina algumas das variáveis "localmente" para usar no restante do script.