Vous devez utiliser le hiveconf pour la substitution de variables.
par exemple
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'
de même, vous pouvez passer sur la ligne de commande:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
Notez qu'il y a env et système de variables, de sorte que vous pouvez référencer ${env:USER}
par exemple.
Pour voir toutes les variables disponibles, à partir de la ligne de commande, exécutez
% hive -e 'set;'
ou de la ruche d'invite de commandes, exécutez
hive> set;
Mise à jour:
J'ai commencé à utiliser des hivevar variables ainsi, de les mettre en hql des extraits que j'ai peut inclure de la ruche à l'aide de la CLI source
de commande (ou à passer à l'as-i, option de ligne de commande).
L'avantage ici est que la variable peut être utilisée avec ou sans la hivevar préfixe, et de permettre quelque chose qui s'apparente à global vs local de l'utiliser.
Ainsi, supposons que certains ont de l'installation.hql qui définit un tablename variable:
set hivevar:tablename=mytable;
alors, je peux l'amener dans la ruche:
hive> source /path/to/setup.hql;
et à utiliser dans la requête:
hive> select * from ${tablename}
ou
hive> select * from ${hivevar:tablename}
J'ai également pu définir un "local" nom de la table, ce qui aurait une incidence sur l'utilisation de ${tablename}, mais pas ${hivevar:tablename}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
vs
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
Sans doute ne veut pas dire trop de la CLI, mais peut avoir hql dans un fichier qui utilise la source, mais certaines des variables "localement" à utiliser dans le reste du script.