Hive执行.q文件SQL报ParseException 退出码64错误排查
问题诱因
报错的核心原因是SQL语句里的字符串常量写法不规范:
- 你写的分隔符
‘—>’用了中文排版场景下的智能弯单引号(‘’),不是SQL语法要求的英文半角直单引号(''),解析器无法识别这是一个字符串常量,直接把字符串内容里的>判定为SQL语法符号。 - 解析逻辑断裂后,后续跟在这个非法内容后的逗号、
COUNT(*)字段都会被判定为选择目标位置的非法输入,最终抛出解析异常,返回码64是Hive任务语法校验失败的标准退出码。
修复方案
- 把所有包裹字符串的弯引号替换为英文半角直单引号,如果需要保留箭头作为分隔符,直接用标准ASCII字符书写箭头即可,不要用输入法生成的长破折号、特殊排版符号。
- 修正后可正常执行的SQL语句如下:
INSERT OVERWRITE DIRECTORY '${OUTPUT}/os_requests/' SELECT OS, '-->', COUNT(*) FROM cloudfront_logs WHERE DateLog BETWEEN '2014-07-05' AND '2014-08-05' GROUP BY OS;
- 保存.q脚本时注意关闭编辑器的「自动替换直引号为弯引号」功能,文件编码选择UTF-8无BOM,避免保存过程中自动生成特殊字符再次触发语法错误。
内容的提问来源于stack exchange,提问作者Jimmy Coole
相关产品推荐
相关产品推荐

