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 用于catalogschemaPattern。然后,兼容的 JDBC 驱动程序应放弃(忽略)该条件。然后,您可以检查 TABLE_CATTABLE_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

* 使用 apache Drill 将 saiku 与 mongo 连接时代替键

基于时间的目录结构 Apache Drill

Apache Drill - 以嵌入式模式连接到 Drill [java]

Apache Drill 查询 HBase 表

存储插件配置持久性不适用于 Apache Drill