shell执行hive sql的*星号问题

hive执行sql时一般都写在bash脚本里,例如:

然而执行的时候,你可能会发现hive莫名其妙的失败了,我们尝试echo $sql的话则会发现输出:

# sh run.sh
select dw hdfs-demo-1.0-SNAPSHOT.jar mr-demo-1.0-SNAPSHOT.jar run.sh spark-demo-1.0-SNAPSHOT.jar spark-sql-demo-1.0-SNAPSHOT.jar from mytable;

原来*被bash替换为了当前目录下的文件,为什么呢?

其实echo $sql相当于:

echo select * from mytable;

此时bash会对*进行解释执行。

如果改成echo “$sql”则相当于:

echo “select * from mytable;”

此时就是普通字符串了。

结论

执行hive -e “$sql”即可。

如果文章帮助了你,请帮我点击1次谷歌广告,或者微信赞助1元钱,感谢!

知识星球有更多干货内容,对我认可欢迎加入:

发表评论

电子邮件地址不会被公开。