Apache Drill 和 databaseMetadata.getColumns:目录/模式的值?
Posted
技术标签:
【中文标题】Apache Drill 和 databaseMetadata.getColumns:目录/模式的值?【英文标题】:Apache Drill and databaseMetadata.getColumns: Values for catalog / schema? 【发布时间】:2017-07-27 08:50:21 【问题描述】:我正在尝试通过 JDBC 使用 Drill,但我在使用数据库元接口时遇到了问题。
我正在访问一个 mongodb 数据库(称为 HR)和一个称为 EMPLOYEES 的集合(我们将 Oracle 的 HR 模式复制到 mongo 中,以测试我们的代码是否可以通过 Apache Drill 移植到 NoSQL 和其他非 RDBMS 源)
像Select * from mongo.HR.EMPLOYEES
这样查询表可以正常工作,但是如何访问数据库元数据?
当我尝试使用该方法时
getColumns()
(catalog=null, Schema = „mongo.HR“, table=“EMPLOYEES”),我只收到一个空结果集。
我也试过设置catalog=mongo,Schema=HR,table=EMPLOYEES,但是没有成功?
任何想法,我可以获得列元数据吗?
【问题讨论】:
【参考方案1】:如果你查看DatabaseMetaData.getColumns
的文档,它会说:
catalog
- 目录名称;必须与目录名称原样匹配 存储在数据库中;""
检索那些没有目录的;null
表示不应使用目录名称来缩小搜索范围schemaPattern
- 模式名称模式;必须与架构名称匹配 它存储在数据库中;""
检索那些没有模式的;null
表示不应使用模式名称来缩小范围 搜索
或者,换句话说,如果您不知道该使用什么,那么将null
用于catalog
和schemaPattern
。然后,兼容的 JDBC 驱动程序应放弃(忽略)该条件。然后,您可以检查 TABLE_CAT
和 TABLE_SCHEM
的值,以查看目录和架构对于列的实际值。
【讨论】:
非常感谢!对于对结果感兴趣的人,Catalog 的值为“DRILL”,即“mongo.HR”中的模式模式。 抱歉,必须重新打开。结果集只有 1 行。 TABLE_NAME 、 TABLE_CAT 和 TABLE_SCHEM 显示预期值,但 COLUMN_NAME 是“*”。 mongo 数据库称为 HR,集合 EMPLOYEES。在 apache Drill Web 客户端中查询集合会显示所有预期的字段。 @AlexHauskrecht 我不使用 MongoDB 也不钻孔,所以我不知道具体情况。如果我不得不猜测,问题可能是对于钻(或 mongodb)来说,列的存在与否不是确定性的,因为它主要是无模式的,所以它不会报告它们。 恐怕你是对的。我希望 Apache Drill 能够实现整个 JDBC 接口,因为它们为包括 MongoDB 在内的许多非 RDBMS 源提供了完整的 SQL 2003 支持。但是返回的列名“*”看起来像是一种解决方法,以防有人打算获取表字段的列表来构建 sql 语句。这不是我在这里需要的,但我将我的问题评为已回答。非常感谢您的支持。以上是关于Apache Drill 和 databaseMetadata.getColumns:目录/模式的值?的主要内容,如果未能解决你的问题,请参考以下文章
* 使用 apache Drill 将 saiku 与 mongo 连接时代替键