如题。
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
看起来是在使用 Hive 执行 "desc table" 命令时,Hive 解析器误认为操作为 "dropIndex",导致出现了错误。这种情况可能是由于 Hive 解析器未能正确识别 "desc table" 命令的语法,或者存在其他语法问题导致的。
该问题可能是由于您在Druid的配置文件中没有正确配置数据库连接驱动导致的。具体来说,您在Druid的配置文件中使用了错误的驱动名称,导致Druid无法正确连接数据库。
为了解决这个问题,您可以考虑在Druid的配置文件中正确配置数据库连接驱动。
问题已修复,请用新版本
https://github.com/alibaba/druid/releases/tag/1.2.5
原回答者GitHub用户wenshao
根据你提供的代码和输出,可以看出问题出在使用了错误的语法解析方法。在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()
等。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。