Version : 1.1.10
SQL : select column01,column02,row_number() over (distribute by column01 sort by column02 desc) rownum from table01;
code : String dbType = JdbcConstants.HIVE; List stmtList = SQLUtils.parseStatements(sql, dbType);
Exception : Exception in thread "main" com.alibaba.druid.sql.parser.ParserException: syntax error, expect RPAREN, actual IDENTIFIER pos 54, line 1, column 45, token IDENTIFIER distribute at com.alibaba.druid.sql.parser.SQLExprParser.accept(SQLExprParser.java:2639) at com.alibaba.druid.sql.parser.SQLExprParser.over(SQLExprParser.java:1579) at com.alibaba.druid.sql.parser.SQLExprParser.over(SQLExprParser.java:1466) at com.alibaba.druid.sql.parser.SQLExprParser.parseAggregateExpr(SQLExprParser.java:1449) at com.alibaba.druid.sql.parser.SQLExprParser.methodRest(SQLExprParser.java:1051) at com.alibaba.druid.sql.parser.SQLExprParser.parseSelectItem(SQLExprParser.java:3236) at com.alibaba.druid.sql.parser.SQLSelectParser.parseSelectList(SQLSelectParser.java:646) at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:265) at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:207) at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:59) at com.alibaba.druid.sql.parser.SQLStatementParser.parseSelect(SQLStatementParser.java:2436) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:149) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:72) at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:464)
原提问者GitHub用户liufanxiao
在Hive中使用row_number() over()函数时,如果同时使用了distribute by语句,则必须在over()函数中指定partition by子句。否则,Hive将无法识别distribute by语句,从而导致解析错误。
您的SQL语句中缺少一个右括号"RPAREN",并且第54个字符是一个标识符"IDENTIFIER",而不是右括号。建议您检查一下SQL语句,看看是否遗漏了什么字符或者括号。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。