Necesita usar el hiveconf especial para la sustitución de variables. p.ej
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'
de manera similar, puede pasar la línea de comando:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
Tenga en cuenta que también hay variables env y system , por lo que puede hacer referencia, ${env:USER}
por ejemplo,.
Para ver todas las variables disponibles, desde la línea de comando, ejecute
% hive -e 'set;'
o desde el indicador de colmena, ejecute
hive> set;
Actualización:
también comencé a usar variables de hivevar , poniéndolas en fragmentos de hql que puedo incluir desde la CLI de hive usando el source
comando (o pasar como opción -i desde la línea de comando). El beneficio aquí es que la variable se puede usar con o sin el prefijo hivevar, y permitir algo similar al uso global vs local.
Entonces, suponga que tiene setup.hql que establece una variable de nombre de tabla:
set hivevar:tablename=mytable;
entonces, puedo traer a la colmena:
hive> source /path/to/setup.hql;
y usar en la consulta:
hive> select * from ${tablename}
o
hive> select * from ${hivevar:tablename}
También podría establecer un nombre de tabla "local", que afectaría el uso de $ {nombre de tabla}, pero no $ {hivevar: nombre de tabla}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
vs
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
Probablemente no signifique mucho de la CLI, pero puede tener hql en un archivo que usa fuente , pero establezca algunas de las variables "localmente" para usar en el resto del script.