knowone
knowone

Reputation: 840

passing argument from shell script to hive script

I've a concern which can be categorized in 2 ways: My requirement is of passing argument from shell script to hive script. OR within one shell script I should include variable's value in hive statement.

I'll explain with an example for both:

1) Passing argument from shell script to hiveQL->

My test Hive QL:
select count(*) from demodb.demo_table limit ${hiveconf:num}

My test shell script:

cnt=1
sh -c 'hive -hiveconf num=$cnt -f countTable.hql'

So basically I want to include the value of 'cnt' in the HQL, which is not happening in this case. I get the error as:

FAILED: ParseException line 2:0 mismatched input '<EOF>' expecting Number near 'limit' in limit clause

I'm sure the error means that the variable's value isn't getting passed on.

2) Passing argument directly within the shell script->

cnt=1
hive -e 'select count(*) from demodb.demo_table limit $cnt'

In both the above cases, I couldn't pass the argument value. Any ideas??

PS: I know the query seems absurd of including the 'limit' in count but I have rephrased the problem I actually have. The requirement remains intact of passing the argument.

Any ideas, anyone?

Thanks in advance.

Upvotes: 4

Views: 29298

Answers (4)

y durga prasad
y durga prasad

Reputation: 1202

hadoop@osboxes:~$ export val=2;

hadoop@osboxes:~$ hive -e "select * from bms.bms1 where max_seq=$val";

or

vi test.sh
#########
export val=2
hive -e "select * from bms.bms1 where max_seq=$val";
#####################

Upvotes: 1

Madhu
Madhu

Reputation: 21

This works, if put in a file named hivetest.sh, then invoked with sh hivetest.sh:

cnt=2
hive -e "select * from demodb.demo_table limit $cnt"

You are using single quotes instead of double. Using double quotes for OPTION #1 also works fine.

Upvotes: 2

Aman
Aman

Reputation: 3261

Try this
cnt=1

hive -hiveconf number=$cnt select * from demodb.demo_table limit ${hiveconf:number}

Upvotes: 0

sras
sras

Reputation: 838

Set the variable this way:

#!/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"

Upvotes: 9

Related Questions