如何在HIVE脚本中设置variables
我正在寻找Hive QL中“SET varname = value”的SQL等价物
我知道我可以做这样的事情:
SET CURRENT_DATE = '2012-09-16'; SELECT * FROM foo WHERE day >= @CURRENT_DATE
但后来我得到这个错误“字符”@“不支持在这里”
您需要使用特殊的hiveconf进行variablesreplace。 例如
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和系统variables,因此您可以参考${env:USER}
。
要查看所有可用的variables,请从命令行运行
% hive -e 'set;'
或者从configuration单元提示符运行
hive> set;
更新:我也开始使用hivevarvariables,把它们放入我可以使用source
命令从hive CLI中包含的hql片段(或者从命令行传递为-i选项)。 这样做的好处是variables可以使用或不使用hivevar前缀,并允许类似于全局和本地使用的东西。
所以,假设有一些setup.hql设置了一个tablenamevariables:
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'
VS
hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'
在CLI中可能并不意味着太多,但是可以在使用源代码的文件中包含hql,但是可以在脚本的其余部分中设置一些“本地”variables。
你有没有尝试过使用美元符号和括号这样的:
SELECT * FROM foo WHERE day >= '${CURRENT_DATE}';
您可以将另一个查询的输出存储在variables中,后者可以在代码中使用相同的查询:
set var=select count(*) from My_table; ${hiveconf:var};