概述
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就不会把我变量中的值当做字符串,也就是路径来读取。因此报错了!!!
由于读取报错信息不仔细,花了我好长时间来排查这个简单的基础错误。。。
吃一堑长一智,细节决定成败!!!
最后
以上就是甜甜百合为你收集整理的Load 当地数据到Hive的Shell错误的全部内容,希望文章能够帮你解决Load 当地数据到Hive的Shell错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复