【问题标题】:Apache Drill 1.2 and Oracle JDBCApache Drill 1.2 和 Oracle JDBC
【发布时间】:2015-10-26 17:00:49
【问题描述】:

在嵌入式模式下使用 Apache Drill v1.2 和 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit。

我很好奇是否有人成功地将 Apache Drill 连接到 Oracle 数据库。我已经使用以下配置(每个文档)更新了drill-override.conf

drill.exec: {
  cluster-id: "drillbits1",
  zk.connect: "localhost:2181",
  drill.exec.sys.store.provider.local.path = "/mypath"
}

并将ojdbc6.jar 放入\apache-drill-1.2.0\jars\3rdparty。我可以成功创建存储插件:

{
  "type": "jdbc",
  "driver": "oracle.jdbc.driver.OracleDriver",
  "url": "jdbc:oracle:thin:@<IP>:<PORT>:<SID>",
  "username": "USERNAME",
  "password": "PASSWORD",
  "enabled": true
}

但是当我发出如下查询时:

    select * from <storage_name>.<schema_name>.`dual`; 

我收到以下错误:

Query Failed: An Error Occurred
org.apache.drill.common.exceptions.UserRemoteException: VALIDATION ERROR: From line 1, column 15 to line 1, column 20: Table '<storage_name>.<schema_name>.dual' not found [Error Id: 57a4153c-6378-4026-b90c-9bb727e131ae on <computer_name>:<PORT>].

我尝试查询其他架构/表并获得类似的结果。我也尝试连接到 Teradata 并得到同样的错误。有没有人有建议/遇到类似问题?

【问题讨论】:

  • 我对 Oracle DB 了解不多。你不认为数据库名称也应该在查询中。
  • DB/SID 在插件的 URL 中提供。我尝试将其包含在查询中,但这不会改变结果,并且将其从存储插件中拉出会导致创建错误。
  • 你试过 select * from .dual;我得到了一些像这样的重复键错误:scalerlabs.io/blog/…
  • use &lt;storage_name&gt; 然后show tables 为你工作?

标签: jdbc oracle10g rdbms apache-drill


【解决方案1】:

它适用于 Drill 1.3(2015 年 12 月 23 日发布)

插件:名称 - oracle

{
  "type": "jdbc",
  "driver": "oracle.jdbc.driver.OracleDriver",
  "url": "jdbc:oracle:thin:user/password@192.xxx.xxx.xxx:1521:orcl ",
  "enabled": true
}

查询:

select * from <plugin-name>.<user-name>.<table-name>;

例子:

select * from oracle.USER.SAMPLE;

查看drill's documentation了解更多详情。

注意:确保您在apache-drill-1.3.0/jars/3rdparty中添加了ojdbc7.12.1.0.2.jar(文档中推荐)

【讨论】:

  • 已确认...1.3 的更新已修复此问题
  • 在黑暗中拍摄,但您尝试过任何 Teradata 连接吗?它看起来没有经过积极测试,我一直无法设置存储插件。
  • @eroma934 是的,它奏效了。我确定你在jars/3rdparty 中添加了tdgssconfig.jarterajdbc4.jar
  • @eroma934 您可以添加一个带有插件详细信息的新问题,如果在添加这些 jars 后无法实现,则所有问题
  • 将 jar 放到 3rdparty 下后是否需要重新启动 Drillbit?
【解决方案2】:

它适用于 Apache Drill 1.3。 奇怪的是我只能查询创建了同义词的表...... 在命令行中尝试:
使用 ;
显示表格;
这将为您提供可以查询的对象列表 - dual 不在该列表中;-)。

【讨论】:

    【解决方案3】:

    我正在使用 apache-drill-1.9.0,似乎模式名称被解释为区分大小写,因此必须是大写。

    对于表user1.my_tab(默认情况下在 Oracle 中以大写形式创建) 这适用于 Drill(插件名称是 oracle

    SELECT * FROM oracle.USER1.my_tab;
    

    但这会触发错误

    SELECT * FROM oracle.user1.my_tab;
    
    SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: Table 'oracle.user1.my_tab' not found
    

    另一种方法是使用use 设置插件名称和架构名称(所有者也必须是大写)

    0: jdbc:drill:zk=local> use oracle.USER1;
    +-------+-------------------------------------------+
    |  ok   |                  summary                  |
    +-------+-------------------------------------------+
    | true  | Default schema changed to [oracle.USER1]  |
    +-------+-------------------------------------------+
    1 row selected (0,169 seconds)
    0: jdbc:drill:zk=local> select * from my_tab;
    +------+
    |  X   |
    +------+
    | 1.0  |
    | 1.0  |
    +------+
    2 rows selected (0,151 seconds)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 2020-01-29
      相关资源
      最近更新 更多