Load 当地数据到Hive的Shell错误

FAILED: ParseException line 2:23 mismatched input '/' expecting StringLiteral near 'inpath' in load statement

这是错误原文,意思是: 在load语句中 输入的 '/'不匹配。希望在inpath后面加入字符串

HIVE=/usr/bin/hive
db_name=test
inpath_words="/home/udf/stopwords/*"
table_name=words
$HIVE -e "
use $db_name;
load data local inpath $inpath_words overwrite into table $table_name;

以上是我的shell脚本

一开始以为是路径或者SQL语句写错了

所以,我把load语句和路径copy到了Hive里运行了一次,但是正常运行了。。。

因此我得到一个结论。Shell脚本写错了!!!

然后又想到可能是变量的定义和引用出现了问题

然后百度了下变量定义的引号问题,再次就着扩展科普一下

单引号:输出时会将引号内的内容原样输出,称之为强引用

双引号:会先把变量、命令、转义字符解析出结果,然后再输出最终内容,推荐使用,这称为弱引用

无引号:赋值时,如果变量内容中有空格,则会造成赋值不完整。而在输出内容时,会将含有空格的字符串视为一个整体来输出;如果内容中有命令(要反引下)、变量等,则会先把变量、命令解析出结果,然后输出最终内容;如果字符串中带有空格等特殊字符,则有可能无法完整地输出,因此需要双引号替代无引号的情况,特别是对变量赋值时改加双引号。一般连续的字符串、数字、路径等可以不加任何引号进行赋值和输输出。

 

于是我将inpath的引号给去了,发现还是这个错,于是我确定了,是SQL语句的问题。。。

最终找到了错误

原来是我的SQL语句的inpath后面没有加单引号。。。因此Hive就不会把我变量中的值当做字符串,也就是路径来读取。因此报错了!!!

由于读取报错信息不仔细,花了我好长时间来排查这个简单的基础错误。。。

吃一堑长一智,细节决定成败!!!

 

 

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值