Load 当地数据到Hive的Shell错误

本文详细解析了一个常见的Hive Shell脚本错误:在使用load data语句时因路径参数未正确引用而导致的ParseException。作者通过实践,发现了单引号在路径字符串中的重要性,并分享了如何避免此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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就不会把我变量中的值当做字符串,也就是路径来读取。因此报错了!!!

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

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

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值