Druid 版本:
com.alibaba druid-spring-boot-starter 1.2.3
Hive 建表SQL
create table ads_data.sale_detail_one23 like ads_data.sale_detail_one1 STORED AS parquet
该语句在hive引擎执行是正常的
解析代码
String hivesql = SQLUtils.format("create table ads_data.sale_detail_one23 like ads_data.sale_detail_one1 STORED AS parquet", "hive");
String s1 = hivesql.replaceAll("`", "");
List<SQLStatement> sqlStatements = SQLUtils.parseStatements(s1, "hive"); // 在该行执行报错
报错信息
22:23:24.044 [main] WARN com.alibaba.druid.sql.SQLUtils - rowFormat error com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'one1 STORED AS parquet, pos 78, line 1, column 73, token IDENTIFIER STORED at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:558) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:602) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:113) at com.alibaba.druid.sql.SQLUtils.format(SQLUtils.java:341) at com.alibaba.druid.sql.SQLUtils.format(SQLUtils.java:334) at com.alibaba.druid.sql.SQLUtils.format(SQLUtils.java:322) at com.alibaba.druid.sql.SQLUtils.format(SQLUtils.java:318)
原提问者GitHub用户chaplinthink
看起来是在使用 Druid 解析器解析 Hive 建表语句时出现了错误。这种错误通常是由于 Druid 解析器无法正确解析 Hive 建表语句的语法和结构,或者存在其他语法问题导致的。
为了解决这个问题,可以考虑以下几个方面:
检查 Hive 建表语句的语法。在编写 Hive 建表语句时,需要确保语法正确,遵循标准的 Hive 建表语法规范和语法要求。可以使用 Hive 命令行工具或者其他工具来检查 Hive 建表语句的语法和正确性。
检查 Druid 解析器的文档。Druid 解析器支持的 SQL 语句和语法可能与 Hive 不同,需要查阅 Druid 解析器的文档,了解其支持的 SQL 语句和语法要求。可以参考 Druid 解析器的官方文档或者其他相关资料。
尝试其他的 SQL 解析器。如果 Druid 解析器无法解析 Hive 建表语句,可以尝试其他的 SQL 解析器,例如 Apache Calcite、ANTLR、JavaCC 等。这些解析器可以更好地支持各种 SQL 语句和语法。
手动编写建表语句。如果使用现有的 SQL 解析器无法解析 Hive 建表语句,可以考虑手动编写建表语句,对 Hive 建表语句进行重新编写和调整。可以参考 Hive 建表语句的语法规范和最佳实践,以提高代码的可读性和可维护性。
问题已修复,请用新版本
https://github.com/alibaba/druid/releases/tag/1.2.5
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。