shell执行hive sql的*星号问题
hive执行sql时一般都写在bash脚本里,例如:
1 2 3 4 5 6 |
#!/bin/bash sql="select * from mytable;" echo $sql hive -e $sql |
然而执行的时候,你可能会发现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”即可。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~
