È necessario utilizzare lo speciale hiveconf per la sostituzione delle variabili. per esempio
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'
allo stesso modo, potresti passare dalla riga di comando:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
Nota che ci sono anche env e variabili di sistema , quindi puoi fare riferimento ${env:USER}
ad esempio.
Per vedere tutte le variabili disponibili, dalla riga di comando, esegui
% hive -e 'set;'
o dal prompt dell'hive, esegui
hive> set;
Aggiornamento:
ho iniziato a utilizzare anche le variabili hivevar , inserendole in frammenti hql che posso includere dalla CLI di hive utilizzando il source
comando (o passa come opzione -i dalla riga di comando). Il vantaggio qui è che la variabile può quindi essere utilizzata con o senza il prefisso hivevar e consentire qualcosa di simile all'uso globale rispetto a quello locale.
Quindi, supponiamo di avere un po ' setup.hql che imposta una variabile tablename:
set hivevar:tablename=mytable;
quindi, posso portare in alveare:
hive> source /path/to/setup.hql;
e usa nella query:
hive> select * from ${tablename}
o
hive> select * from ${hivevar:tablename}
Potrei anche impostare un tablename "locale", che influirebbe sull'uso di $ {tablename}, ma non di $ {hivevar: tablename}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
vs
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
Probabilmente non significa molto dalla CLI, ma può avere hql in un file che utilizza il sorgente , ma impostare alcune delle variabili "localmente" da utilizzare nel resto dello script.