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的用法,注意参数容易传反。。。

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐