大數(shù)據(jù)分析(四):使用R讀取關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)

關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)

關(guān)系型數(shù)據(jù)庫(kù)是目前企業(yè)數(shù)據(jù)存儲(chǔ)最常用的方案,常用的關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)有MySQL/Oracle/DB2等等。如果需要對(duì)這些數(shù)據(jù)庫(kù)編程一般有如下兩種方式:

  • 廠家的專有API

這種方式一般采用廠家提供的開發(fā)包和專有API,優(yōu)點(diǎn)是數(shù)據(jù)庫(kù)操作的性能比較高,且能使用一些廠家提供的數(shù)據(jù)庫(kù)專有的功能。缺點(diǎn)是各個(gè)廠家接口和開發(fā)平臺(tái)不統(tǒng)一,對(duì)于開發(fā)者學(xué)習(xí)成本較高。

  • 數(shù)據(jù)庫(kù)驅(qū)動(dòng)

這種方式一般通過一種數(shù)據(jù)庫(kù)中間件提供操作API。中間件直接使用各個(gè)廠家提供的驅(qū)動(dòng)包,對(duì)上層開發(fā)提供統(tǒng)一的API接口。優(yōu)點(diǎn)是所有數(shù)據(jù)庫(kù)的操作可以通過一套API解決,開發(fā)者的學(xué)習(xí)成本低,且開發(fā)簡(jiǎn)單。缺點(diǎn)是性能相比上一中方式要差一些,且無法使用一些數(shù)據(jù)庫(kù)的專有功能。常見的數(shù)據(jù)庫(kù)連接中間件有ODBC和JDBC。ODBC主要用于Windows平臺(tái)的數(shù)據(jù)庫(kù)連接,且大多使用C/C++語(yǔ)言來進(jìn)行連接數(shù)據(jù)庫(kù)。JDBC是專門針對(duì)Java的數(shù)據(jù)庫(kù)連接工具,使用更加廣泛,且跨平臺(tái)。

在R環(huán)境中,我們可以通過rJava包來使用JDBC連接數(shù)據(jù)庫(kù)。既然是采用JDBC連接數(shù)據(jù)庫(kù),那么所有的關(guān)系型數(shù)據(jù)庫(kù),只要能支持JDBC連接的,都可以采用下面內(nèi)容中方式來進(jìn)行連接,所不同的是驅(qū)動(dòng)包而已。

下面就以MySQL為例,詳細(xì)描述如何使用R來連接關(guān)系型數(shù)據(jù)庫(kù)中的表。

假設(shè)MySQL中存在stu表,字段分別為stu_no(學(xué)號(hào)),stu_name(學(xué)生姓名),stu_age(學(xué)生年齡)

# 建表語(yǔ)句

CREATE TABLE STU(
   STU_NO INT PRIMARY KEY,
   STU_NAME VARCHAR(32) ,
   STU_AGE INT );


#插入數(shù)據(jù)

INSERT INTO STU(STU_NO, STU_NAME, STU_AGE) VALUES(1000001, 'zs', 23);
INSERT INTO STU(STU_NO, STU_NAME, STU_AGE) VALUES(1000002, 'ls', 20);
INSERT INTO STU(STU_NO, STU_NAME, STU_AGE) VALUES(1000003, 'ww', 21);
INSERT INTO STU(STU_NO, STU_NAME, STU_AGE) VALUES(1000004, 'xxs', 22);

上述腳本在MySQL中執(zhí)行以后,可以通過查詢語(yǔ)句來驗(yàn)證數(shù)據(jù)插入成功:

SELECT * FROM STU;
MySQL中的數(shù)據(jù)

數(shù)據(jù)準(zhǔn)備好了以后我們就可以通過R來連接MySQL數(shù)據(jù)庫(kù)了。因?yàn)槭峭ㄟ^JDBC來進(jìn)行連接,所以需要知道MySQL的連接參數(shù):IP地址、用戶名、密碼、數(shù)據(jù)庫(kù)名。假設(shè)測(cè)試環(huán)境中的MySQL上述參數(shù)為:

  • IP: 192.168.56.1
  • 用戶名:root
  • 密碼:root
  • 數(shù)據(jù)庫(kù)名:test

直接在命令行下輸入R進(jìn)入環(huán)境:

 root@hostname# R
R環(huán)境

安裝所需要的R包:

  install.package("rJava")
  install.package("DBI")
  install.package("RJDBC")
  library('rJava')
  library('DBI')
  library('RJDBC')

下載MySQL的JDBC驅(qū)動(dòng)包,點(diǎn)我下載.

將下載的jar包保存在當(dāng)前目錄下,假設(shè)當(dāng)前目錄為/home/test/,那么MySQL的驅(qū)動(dòng)包保存的完全路徑為:

/home/test/mysql-connector-java-5.1.30-bin.jar

那么在R中輸入如下命令加載驅(qū)動(dòng):

drv <- JDBC(“com.mysql.jdbc.Driver”, “/home/test/mysql-connector-java-5.1.30-bin.jar”)  //加載驅(qū)動(dòng)

上述drv為加載以后的驅(qū)動(dòng),使用該驅(qū)動(dòng)即可鏈接數(shù)據(jù)庫(kù):

conn <- dbConnect(drv, “jdbc:mysql://192.168.56.1:3306/test”, “root”, “root”)   //建連接

jdbc:mysql://192.168.56.1:3306/test為jdbc連接參數(shù),格式為:jdbc:mysql://ip:3306/dbname,其中ip和dbname分別為MySQL的IP地址和數(shù)據(jù)庫(kù)名稱。上述語(yǔ)句中的conn為建立的連接參數(shù)。

然后利用建立的連接就可以進(jìn)行查詢了:

dt = dbGetQuery(conn,“select * from stu”)   //測(cè)試連接

dt就是查詢出來的結(jié)果集,在R中自動(dòng)轉(zhuǎn)換成為dataframe類型。那么我們可以方便的使用head來查看其中的內(nèi)容:

head(dt)

這樣數(shù)據(jù)就從關(guān)系型數(shù)據(jù)庫(kù)加載到R中了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容