开发者社区> 问答> 正文

Hive类型row_number() over()函数使用distribute by时语句解析报错

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

展开
收起
山海行 2023-07-05 19:49:11 140 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在Hive中使用row_number() over()函数时,如果同时使用了distribute by语句,则必须在over()函数中指定partition by子句。否则,Hive将无法识别distribute by语句,从而导致解析错误。

    2023-07-30 15:09:22
    赞同 展开评论 打赏
  • 您的SQL语句中缺少一个右括号"RPAREN",并且第54个字符是一个标识符"IDENTIFIER",而不是右括号。建议您检查一下SQL语句,看看是否遗漏了什么字符或者括号。

    2023-07-11 09:53:28
    赞同 展开评论 打赏
  • 应该是partition by而不是distribute by吧

    原回答者GitHub用户wenshao

    2023-07-06 11:09:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hive Bucketing in Apache Spark 立即下载
spark替代HIVE实现ETL作业 立即下载
2019大数据技术公开课第五季—Hive迁移到MaxCompute最佳实践 立即下载

相关镜像