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

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

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

 

 

 

### Hive Shell 常用命令及其语法示例 #### 表管理操作 - **显示数据库中的所有表** 使用 `SHOW TABLES;` 可以查看当前数据库下的所有表[^1]。 - **切换至特定数据库** 切换到目标数据库可以使用 `USE database_name;`,其中 `database_name` 是要切换的目标数据库名称。 - **描述表结构** 查看某个表的具体字段定义以及存储信息可以通过 `DESCRIBE table_name;` 或者更详细的 `DESCRIBE FORMATTED table_name;` 来实现。 ```sql DESCRIBE employees; DESCRIBE FORMATTED employees; ``` #### 数据加载与查询 - **加载本地文件数据Hive表中** 将外部的数据文件导入到已存在的Hive表里通常采用如下形式的 load data 命令[^2]: ```sql LOAD DATA LOCAL INPATH '/path/to/local/file' INTO TABLE table_name; ``` - **向分区表插入新数据** 对于已经设置了分区属性的表格来说,可利用 insert overwrite statement 完成更新或者追加记录动作。例如: ```sql INSERT OVERWRITE TABLE sales PARTITION (region='west') SELECT * FROM temp_sales WHERE region='west'; ``` #### 参数设置 - **通过set指令临时修改运行期参数值** 用户可以在执行脚本前调整某些性能调优选项或者其他行为特性开关状态。比如启用压缩功能或将中间结果写入磁盘缓存等措施来提升效率: ```bash SET hive.exec.compress.output=true; SET mapreduce.map.memory.mb=4096; ``` #### 其他实用工具类命令 - **获取帮助文档** 输入 `HELP 'command';` 能够快速定位关于某条具体SQL关键字的帮助说明页面。 ```bash HELP 'SELECT'; ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值