前兩篇裝了Hadoop跟Oracle
為了接下來可以測試sqoop,使用ROracle去塞一下資料表進去
在windows下,安裝ROracle,也測試看看在centos下安裝看看
(Note: modified at 2018/04/19)
(ubuntu, mint部分前面有文章介紹怎麼裝R,就不在贅述,至於裝ROracle就跟centos大同小異了)
- 準備工作
基本上同Hadoop那篇,這裡就不贅述
我這裡是直接裝在Hadoop的master (sparkServer0)上
centos部分: (windows請往下轉)
- 安裝Microsoft R Open
主要參考我自己前幾篇文章 -
Some installations of centos
簡單敘述一下(不同的地方是centos最小安裝沒有wget):
1 | ## 更新repo,並安裝R |
- 安裝ROracle
先從官方網站下載Oracle instant client,下載basck.rpm跟devel.rpm(詳細檔名看下方),然後上傳到VM
接著下載ROracle原始包,利用R CMD INSTALL
並同時configure做安裝的動作,指令如下:
1 | # 安裝Oracle instant client |
windows部分:
- 安裝MRO跟MKL
到官方網站下載安裝包
然後安裝MRO跟MKL,安裝之後,利用installr安裝Rtools
打開R輸入
1 | install.packages("installr") |
接著安裝一些需要的套件:
1 | ## 安裝一些ROracle的必要套件 |
然後一樣到Oracle的官方網站下載instant client,要下載basic跟sdk
解壓縮放到C:\instantclient_12_1
接著下載R的套件包:https://cran.r-project.org/src/contrib/ROracle_1.3-1.tar.gz
在安裝的目錄下新增一個install_ROracle.bat
的檔案
按右鍵編輯貼上下方內容後執行就可以成功安裝ROracle了
1 | SET OCI_LIB64=C:\instantclient_12_1 |
PS: 這裡我還沒有測試過,因為避免牽扯到windwos的環境變數就省掉
如果有人測試過不行,我在提供增加的環境變數
我是直接安裝Rtools手動設定環境變數… 比較不適合一般初學者
- 創造適當的使用者
我想要創造三個使用者,等等利用ROracle上傳到這三個使用者下的schema,SQL內容如下:
1 | CREATE TABLESPACE nycflights13 |
PS: C##是Oracle要求的,請搜尋common users vs local users oracle就知道差異,還有命名要求
把上面的SQL下載下來命名成createUser.sql
並上傳到Oracle的server
使用$ORACLE_HOME/bin/sqlplus system/password@oracleServer:1539/orcl @createUser.sql
來執行創造使用者的SQL
- 使用ROracle去上傳資料
程式如下:
1 | library(ROracle) |
- 小抱怨
ROracle寫入表格的時候,會自動加上double quote框住表格
因為這一個自動功能,讓我debug,de了一天晚上
最後是去下載Oracle PL/SQL Developer用介面的自動提示才發現這件事情…
然後才回去看dbWriteTable下面的解釋
Table, schema, and column names are case sensitive, e.g., table names ABC and abc are not the same. All database schema object names should not include double quotes as they are enclosed in double quotes when the corresponding SQL statement is generated.
只是最神奇的事情是
1 | dbWriteTable(con, "airlines", as.data.frame(airlines), row.names = FALSE) |
寫入表格之後,query的表格名字要加quote,像這樣:
1 | dbSendQuery(con, "select * from \"airlines\"") %>>% fetch(n = -1) %>>% data.table |
我查表是否存在不用quote
1 | dbExistsTable(con, "airlines") |
害我一直想說為啥我找不到我的表
最後只能去安裝Oracle SQL Developer查看真正的表格名稱
7/31補充:
更扯的事情是column name都有包quote,select時候,都要多打””去框住column name
8/12更新:
全部使用大寫字元,就不會產生上面的情況