您需要使用特殊的 hiveconf 进行变量替换。
例如
hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= ${hiveconf:CURRENT_DATE}
同样,你可以在命令行上传递:
% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
请注意,还有 env 和 system 变量,因此您可以引用 ${env:USER} 为例。
要查看所有可用变量,请从命令行运行
% hive -e 'set;'
或从 hive 提示符运行
hive> set;
更新:
我也开始使用 hivevar 变量,将它们放入 hql sn-ps 我可以使用 source 命令从 hive CLI 中包含(或从命令行传递 -i 选项)。
这里的好处是该变量可以在有或没有 hivevar 前缀的情况下使用,并允许类似于全局与本地使用的东西。
所以,假设有一些 setup.hql 设置了一个表名变量:
set hivevar:tablename=mytable;
然后,我可以带入蜂巢:
hive> source /path/to/setup.hql;
并在查询中使用:
hive> select * from ${tablename}
或
hive> select * from ${hivevar:tablename}
我还可以设置一个“本地”表名,这会影响 ${tablename} 的使用,但不会影响 ${hivevar:tablename}
hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'
对
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
可能对 CLI 没有太多意义,但可以在使用 source 的文件中包含 hql,但可以“本地”设置一些变量以在脚本的其余部分中使用。