雇员: Table data
我想通过运行hive脚本sample.hql来获取year = 2016的记录。
use octdb;
select * from '${hiveconf:table}' where year = '${hiveconf:year}';
[cloudera@quickstart ~]$ hive -hiveconf table='employee', year=2016 -f sample.hql
但我收到错误NoViableAltException(307 @ []).......
答案 0 :(得分:7)
您需要使用--hiveconf
选项两次:
hive --hiveconf table=employee --hiveconf year=2016 -f sample.hql
答案 1 :(得分:0)
通过让R& D找到正确的答案,$ {hiveconf:table}应该在没有''的脚本中定义。 sample.hql: -
use ${hiveconf:database};
select * from ${hiveconf:table} where year = ${hiveconf:year};
运行sample.hql
[cloudera@quickstart shell]$ hive -hiveconf database=octdb -hiveconf table=employee -hiveconf year=2016 -f sample.hql
使用文件中的配置初始化日志:/etc/hive/conf.dist/hive-log4j.properties 行
Time taken: 1.484 seconds
OK
1 A 2016
2 B 2016
4 D 2016
所用时间:4.423秒,提取:3行
答案 2 :(得分:0)
传递变量也可以通过“ hivevar”以及“ hiveconf”来实现。
这里是区别:
添加了hiveconf命名空间,应使用(-hiveconf)设置Hive配置值。
添加了hivevar命名空间,应使用(-hivevar)定义用户变量。
也可以使用hiveconf,但不建议将其用于变量替换,因为为此明确创建了hivevar。
set hivevar:YEAR=2018;
SELECT * from table where year=${YEAR};
hive --hiveconf var='hello world' -e '!echo ${hiveconf:var};'
-- this will print: hello world
答案 3 :(得分:0)
对于更新的Hive版本,您应该使用--hivevar
。早期,开发人员能够使用--hiveconf
来设置配置,并且它还用于变量。但是,后来的--hivevar
被实现为HIVE-2020中提到的变量具有单独的命名空间。
与蜜蜂一起使用
beeline --hivevar table=employee --hivevar year=2016 -f sample.hql
有了这个,您可以在Hive脚本文件中直接访问此变量,也可以使用如下的hivevar命名空间。
select * from ${table};
select * from ${hivevar:table};
请注意,您可能需要使用-u <db_URL>
选项指定URL字符串。