select de2.*
,locate(';',de2.cus_rank) as cus_rank_new
from table
limit 10
运行查询语句时
java.sql.SQLException: org.apache.spark.sql.catalyst.parser.ParseException:
mismatched input ''' expecting {'(', 'SELECT', 'FROM', 'ADD', 'AS', 'ALL', 'DISTINCT', 'WHERE', 'GROUP', 'BY', 'GROUPING', 'SETS', 'CUBE', 'ROLLUP', 'ORDER', 'HAVING', 'LIMIT', 'AT', 'OR', 'AND', 'IN', NOT, 'NO', 'EXISTS', 'BETWEEN', 'LIKE', RLIKE, 'IS', 'NULL', 'TRUE', 'FALSE', 'NULLS', 'ASC', 'DESC', 'FOR', 'INTERVAL', 'CASE', 'WHEN', 'THEN', 'ELSE', 'END', 'JOIN', 'CROSS', 'OUTER', 'INNER', 'LEFT', 'SEMI', 'RIGHT', 'FULL', 'NATURAL', 'ON', 'LATERAL', 'WINDOW', 'OVER', 'PARTITION', 'RANGE', 'ROWS', 'UNBOUNDED', 'PRECEDING', 'FOLLOWING', 'CURRENT', 'FIRST', 'AFTER', 'LAST', 'ROW', 'WITH', 'VALUES', 'CREATE', 'TABLE', 'DIRECTORY', 'VIEW', 'REPLACE', 'INSERT', 'DELETE', 'INTO', 'DESCRIBE', 'EXPLAIN', 'FORMAT', 'LOGICAL', 'CODEGEN', 'COST', 'CAST', 'SHOW', 'TABLES', 'COLUMNS', 'COLUMN', 'USE', 'PARTITIONS', 'FUNCTIONS', 'DROP', 'UNION', 'EXCEPT', 'MINUS', 'INTERSECT', 'TO', 'TABLESAMPLE', 'STRATIFY', 'ALTER', 'RENAME', 'ARRAY', 'MAP', 'STRUCT', 'COMME....
java.sql.SQLException: org.apache.spark.sql.catalyst.parser.ParseException: 这句的意思应该是spark在做sql转化时报错。
输入'(单引号)有问题mismatched,期望expecting一个大括号里面的任何一个,但不可能是'(单引号)或者其他符号(单引号之后的符号)。
一开始没有认真看人家的报错,后面实在没有解决,反复查看报错信息,终于发现人家说的很清楚。。。
为什么会报这个错误呢?问题就出在英文状态下的;分号,这个是sql结束的标志。后面程序会认为是一段新的sql,找到这个原因,问题就迎刃而解了。
解决方式无非是转译。
百度一下 hive 查找英文状态下的分号
有效的方法是将;替换成\073进行转义。
select de2.*
,locate('\073',de2.cus_rank) as cus_rank_new
from table
limit 10
###locate的用法,注意参数容易传反。。。
版权声明:本文为weixin_42079988原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。