Pig执行LOAD语句报mismatched input '-' expecting RIGHT_PAREN错误求助
报错原因分析
Apache Pig的语法明确规定:用户自定义的标识符(包含列名、变量名、别名等)只能由大小写字母、数字、下划线组成,不支持直接使用连字符-作为标识符的组成部分。解析器读取到Book-Title里的-时,会将其识别为减法运算符,而非列名的一部分,因此触发语法解析错误,和报错提示「mismatched input '-' expecting RIGHT_PAREN」完全匹配。
可行解决方案
- 方案1:将列名中的连字符替换为下划线(最推荐,符合Pig社区通用命名规范,后续不需要额外转义处理)
修改后的代码如下:
book = LOAD '/user/samanthafox/books.csv' USING PigStorage(',') AS ( ISBN:chararray, book_title:chararray, book_author:chararray, year_of_publication:chararray, publisher:chararray ); DUMP book;
- 方案2:如果必须保留带连字符的命名形式,可以用反引号包裹包含特殊字符的列名做转义处理
修改后的代码如下:
book = LOAD '/user/samanthafox/books.csv' USING PigStorage(',') AS ( ISBN:chararray, `Book-Title`:chararray, `Book-Author`:chararray, `Year-Of-Publication`:chararray, Publisher:chararray ); DUMP book;
注意后续如果要引用这些带连字符的列,也必须全程用反引号包裹,否则仍会触发语法错误。
内容的提问来源于stack exchange,提问作者Samantha Fox
相关产品推荐
相关产品推荐

