2015-10-26 83 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)