开发者社区> 问答> 正文

hive ddl语句格式化报错com.alibaba.druid.sql.parser.Parser

问题简单描述 hive ddl语句通过SQLUtils.formatHive方法进行格式转换时报com.alibaba.druid.sql.parser.ParserException: syntax error

使用版本 1.hive ddl语句由hive 2.1.1版本HiveMetaStoreClient获取。 2.druid版本1.2.3

示例

String createDdl = "create external table ods.ods_dc_test_df ( id bigint comment 'id', name string comment '名称' ) " + "comment '测试表' partitioned by ( dt string ) " + "row format serde 'org.apache.hadoop.hive.ql.io.parquet.serde.parquethiveserde' " + "stored as inputformat 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' " + " outputformat 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' " + "location 'hdfs://dc/user/hive/warehouse/ods.db/ods_dc_test_df'" + " tblproperties ( parquet.compression = 'snappy' , transient_lastDdlTime = '1603362950' )";

    String format = SQLUtils.formatHive(createDdl);

    System.out.println(format);

报错

com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'es ( parquet.compression = 'snappy'', expect =, actual ., pos 486, line 1, column 486, token . at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:558) at com.alibaba.druid.sql.parser.SQLParser.accept(SQLParser.java:566) at com.alibaba.druid.sql.dialect.hive.parser.HiveCreateTableParser.parseCreateTable(HiveCreateTableParser.java:299) at com.alibaba.druid.sql.parser.SQLCreateTableParser.parseCreateTable(SQLCreateTableParser.java:45) at com.alibaba.druid.sql.dialect.hive.parser.HiveStatementParser.parseCreateTable(HiveStatementParser.java:355) at com.alibaba.druid.sql.parser.SQLStatementParser.parseCreate(SQLStatementParser.java:3332) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:249) 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.formatHive(SQLUtils.java:213) at com.thorntree.bigdata.Sql.HiveParseSql.main(HiveParseSql.java:16)

原提问者GitHub用户thorntree

展开
收起
山海行 2023-07-05 18:13:11 263 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    根据您提供的问题描述,看起来是在使用 Alibaba Druid 解析器(com.alibaba.druid.sql.parser.Parser)对 Hive DDL 语句进行格式化时出现了错误。这种错误可能是由于 Druid 解析器无法识别或者解析 Hive DDL 语句导致的。

    为了解决这个问题,可以考虑以下几个方面:

    检查 Hive DDL 语句的语法。在编写 Hive DDL 语句时,需要确保语法正确,遵循标准的 Hive DDL 语法规范和语法要求。可以使用 Hive 命令行工具或者其他工具来检查 Hive DDL 语句的语法和正确性。

    查看 Druid 解析器的文档。Druid 解析器支持的 SQL 语句和语法可能与 Hive 不同,需要查阅 Druid 解析器的文档,了解其支持的 SQL 语句和语法要求。可以参考 Druid 解析器的官方文档或者其他相关资料。

    尝试其他的 SQL 解析器。如果 Druid 解析器无法解析 Hive DDL 语句,可以尝试其他的 SQL 解析器,例如 Apache Calcite、ANTLR、JavaCC 等。这些解析器可以更好地支持各种 SQL 语句和语法。

    手动编写格式化程序。如果使用现有的 SQL 解析器无法解析 Hive DDL 语句,可以考虑手动编写格式化程序,对 Hive DDL 语句进行格式化和调整。可以使用正则表达式或者其他工具来进行格式化和调整。

    2023-07-30 20:00:15
    赞同 展开评论 打赏
  • 问题已修复,请用新版本

    https://github.com/alibaba/druid/releases/tag/1.2.5

    原回答者GitHub用户wenshao

    2023-07-06 10:48:53
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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