2015-10-26 56 views
1

使用Apache Drill v1.2和Oracle数据库10g企业版版本10.2.0.4.0 - 64位处于嵌入模式。Apache Drill 1.2和Oracle JDBC

我很好奇,如果有人已经成功连接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并得到相同的错误。有没有人有类似的建议/遇到类似的问题?

+0

我对Oracle DB了解不多。你不认为数据库名称也应该在查询中。 –

+1

DB/SID在插件的URL中提供。我试图将它包含在查询中,但不会改变结果,并将其从存储插件中取出导致创建错误。 – eroma934

+0

您尝试过从 .'dual'中选择*吗?我得到了一些像这样的重复键错误:http://www.scalerlabs.io/blog/apache-drill-exploring-connecting-to-rdbms-via-jdbc/ –

回答

2

它的工作与钻1.3(23日 - 12月2015年发布)

插件:名字 - 甲骨文

{ 
    "type": "jdbc", 
    "driver": "oracle.jdbc.driver.OracleDriver", 
    "url": "jdbc:oracle:thin:user/[email protected]:1521:orcl ", 
    "enabled": true 
} 

查询:

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

例子:

select * from oracle.USER.SAMPLE; 

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

Note: Make sure you added ojdbc7.12.1.0.2.jar (recommended in docs) in apache-drill-1.3.0/jars/3rdparty

+0

确认... 1.3的更新已修复此问题 – eroma934

+0

在黑暗中拍摄,但您是否尝试过任何Teradata连接?它看起来没有经过积极的测试,我一直无法设置存储插件。 – eroma934

+0

@ eroma934是的,它的工作。我相信你在'jars/3rdparty'中添加了'tdgssconfig.jar'和'terajdbc4.jar' –

1

这种类型的Apache钻1.3工作。 奇怪的是,我只能查询其中有同义词创建的表... 在命令行中尝试:
使用< storage_name>;
显示表格;
这会给你一个你可以查询的对象列表 - 双不在这个列表上;-)。

0

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

对于表user1.my_tab(也就是每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)