【发布时间】:2015-06-02 09:18:26
【问题描述】:
我有一个问题,可以分为两种方式: 我的要求是将参数从 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'
所以基本上我想在 HQL 中包含“cnt”的值,在这种情况下不会发生。我得到的错误是:
FAILED: ParseException line 2:0 mismatched input '<EOF>' expecting Number near 'limit' in limit clause
我确定错误意味着变量的值没有被传递。
2) 直接在 shell 脚本中传递参数->
cnt=1
hive -e 'select count(*) from demodb.demo_table limit $cnt'
在上述两种情况下,我都无法传递参数值。有什么想法吗??
PS:我知道在计数中包含“限制”的查询似乎很荒谬,但我已经重新表述了我实际遇到的问题。传递参数的要求保持不变。
任何想法,任何人?
提前致谢。
【问题讨论】:
-
你能在第二种情况下做 echo 看看你得到了什么: echo 'select count(*) from demodb.demo_table limit $cnt'
-
使用单引号抑制扩展。