Vous devez utiliser le hiveconf spécial 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 en ligne de commande:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
Notez qu'il existe également des variables env et système , vous pouvez donc y faire référence ${env:USER}
par exemple.
Pour voir toutes les variables disponibles, à partir de la ligne de commande, exécutez
% hive -e 'set;'
ou à partir de l'invite de la ruche, exécutez
hive> set;
Mise à jour:
J'ai également commencé à utiliser des variables hivevar , en les plaçant dans des extraits de code hql que je peux inclure à partir de la CLI de la ruche en utilisant la source
commande (ou en passant l'option -i à partir de la ligne de commande). L'avantage ici est que la variable peut ensuite être utilisée avec ou sans le préfixe hivevar, et permettre quelque chose qui s'apparente à une utilisation globale ou locale.
Donc, supposons que vous ayez un fichier setup.hql qui définit une variable de nom de table :
set hivevar:tablename=mytable;
alors, je peux mettre en ruche:
hive> source /path/to/setup.hql;
et utiliser dans la requête:
hive> select * from ${tablename}
ou
hive> select * from ${hivevar:tablename}
Je pourrais également définir un nom de table "local", ce qui affecterait l'utilisation de $ {nom_table}, mais pas de $ {hivevar: nom_table}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
contre
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
Cela ne veut probablement pas dire trop de la CLI, mais peut avoir hql dans un fichier qui utilise la source , mais définir certaines des variables "localement" à utiliser dans le reste du script.