开发者社区> 问答> 正文

hive解析"desc table"语法 会将操作误认为dropIndex

如题。

List stmtList = SQLUtils.parseStatements("desc bi.aaa", DbType.hive); SQLStatement stmt = stmtList.get(0); SchemaStatVisitor statVisitor = SQLUtils.createSchemaStatVisitor(DbType.hive); stmt.accept(statVisitor); System.out.println(statVisitor.getTables());

输出为: {bi.aaa=DropIndex}

原提问者GitHub用户axzhcode

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

    看起来是在使用 Hive 执行 "desc table" 命令时,Hive 解析器误认为操作为 "dropIndex",导致出现了错误。这种情况可能是由于 Hive 解析器未能正确识别 "desc table" 命令的语法,或者存在其他语法问题导致的。

    2023-07-30 20:00:34
    赞同 展开评论 打赏
  • 该问题可能是由于您在Druid的配置文件中没有正确配置数据库连接驱动导致的。具体来说,您在Druid的配置文件中使用了错误的驱动名称,导致Druid无法正确连接数据库。
    为了解决这个问题,您可以考虑在Druid的配置文件中正确配置数据库连接驱动。

    2023-07-09 10:25:33
    赞同 展开评论 打赏
  • 问题已修复,请用新版本

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

    原回答者GitHub用户wenshao

    2023-07-06 10:47:59
    赞同 展开评论 打赏
  • 根据你提供的代码和输出,可以看出问题出在使用了错误的语法解析方法。在Hive中,使用DESCRIBE关键字来描述表而不是DESC

    要正确解析DESCRIBE TABLE语句并获取表的元数据信息,你需要修改代码如下:

    List<SQLStatement> stmtList = SQLUtils.parseStatements("DESCRIBE bi.aaa", DbType.hive);
    SQLStatement stmt = stmtList.get(0);
    SchemaStatVisitor statVisitor = SQLUtils.createSchemaStatVisitor(DbType.hive);
    stmt.accept(statVisitor);
    System.out.println(statVisitor.getColumns());
    

    这样修改之后,你将能够获得表的列信息,而不会被误认为是DROP INDEX操作。

    注意:getColumns()方法用于获取表的所有列信息。如果你想要获取其他表的元数据信息,可以使用相应的方法,如getTables(),getIndexes()等。

    2023-07-05 18:54:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像