Hive执行SQL编译报错ParseException无法识别default.sales_withcomma
报错根因
- Hive SQL语法中,单引号
'的作用是包裹字符串常量,不能用来包裹库名、表名这类标识符。语句中写的'default'.'sales_withcomma'会被解析器判定为非法的字符串拼接格式,无法识别为合法的库表关联源,直接触发解析阶段的语法错误,和抛出的cannot recognize input near ''default'' '.' ''sales_withcomma'' in join source报错完全匹配。 - 你将SELECT查询语句、ALTER TABLE修改表属性的DDL语句无分隔直接拼接执行,Hive客户端默认单次提交单条SQL时,多语句无有效分隔也会触发解析异常。
修复方案
- 移除库名、表名外层的单引号:如果标识符没有特殊字符,直接写名称即可;如果存在特殊关键字、特殊字符需要转义,使用Hive规定的反引号
`包裹标识符,禁止用单引号包裹库、表、列名。 - 拆分SQL语句单独执行,多语句之间必须用分号
;做分隔,不支持多语句提交的客户端请逐句运行。
正确可执行的SQL示例
先执行修改表SerDe属性的语句,确保带逗号的CSV字段可以被正确解析:
-- 切换到目标库 USE default; -- 设置表使用CSVSerde处理带逗号的字段值 ALTER TABLE sales_withcomma SET SERDE 'com.bizo.hive.serde.csv.CSVSerde';
SerDe配置生效后再执行查询:
-- 合法的库表引用写法,无多余单引号 SELECT * FROM default.sales_withcomma;
补充说明:如果执行ALTER语句时抛出类找不到异常,请提前将CSVSerde对应的依赖Jar包上传至Hive类路径,或在执行语句前用
ADD JAR命令加载对应依赖即可。
内容的提问来源于stack exchange,提问作者Rajarshi Maiti
相关产品推荐
相关产品推荐

