我关注的问题可分为两种方式: 我的要求是将参数从shell脚本传递给hive脚本。 要么 在一个shell脚本中,我应该在hive语句中包含变量的值。
我将以两个例子解释:
1)将参数从shell脚本传递给hiveQL->
My test Hive QL:
select count(*) from demodb.demo_table limit ${hiveconf:num}
我的测试shell脚本:
cnt=1
sh -c 'hive -hiveconf num=$cnt -f countTable.hql'
所以基本上我想要包含' cnt'的价值。在HQL中,在这种情况下不会发生。我得到错误:
FAILED: ParseException line 2:0 mismatched input '<EOF>' expecting Number near 'limit' in limit clause
我确定错误意味着变量的值不会被传递。
2)直接在shell脚本中传递参数 - &gt;
cnt=1
hive -e 'select count(*) from demodb.demo_table limit $cnt'
在上述两种情况下,我都无法传递参数值。任何想法??
PS:我知道包含“限制”的查询似乎很荒谬。伯爵,但我已经改写了我实际拥有的问题。通过论证的要求仍然完整。
任何想法,任何人?
提前致谢。
答案 0 :(得分:8)
以这种方式设置变量:
#!/bin/bash
cnt=3
echo "Executing the hive query - starts"
hive -hiveconf num=$cnt -e ' set num; select * from demodb.demo_table limit ${hiveconf:num}'
echo "Executing the hive query - ends"
答案 1 :(得分:2)
如果将其放入名为hivetest.sh
的文件中,则会使用sh hivetest.sh
进行调用:
cnt=2
hive -e "select * from demodb.demo_table limit $cnt"
您使用单引号而不是双引号。 使用OPTION#1的双引号也可以正常工作。
答案 2 :(得分:1)
hadoop @ osboxes:〜$ export val = 2;
hadoop @ osboxes:〜$ hive -e&#34;从bms.bms1中选择*,其中max_seq = $ val&#34 ;;
或
vi test.sh
#########
export val=2
hive -e "select * from bms.bms1 where max_seq=$val";
#####################
答案 3 :(得分:0)
试试这个 cnt = 1
hive -hiveconf number=$cnt select * from demodb.demo_table limit ${hiveconf:number}