将参数从shell脚本传递给hive脚本

时间:2015-06-02 09:18:26

标签: bash hadoop hive

我关注的问题可分为两种方式: 我的要求是将参数从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:我知道包含“限制”的查询似乎很荒谬。伯爵,但我已经改写了我实际拥有的问题。通过论证的要求仍然完整。

任何想法,任何人?

提前致谢。

4 个答案:

答案 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}