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”即可。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~