2013年8月10日 星期六

RODBC 與 SQL Server 資料匯入與寫入

Problem:
如何將 R 資料寫入至 SQL Server 資料庫

Analysis:
針對 SQL Server 資料庫可採用 RODBC 套件, 其中 sqlQuery 指令可執行資料匯入至R與將R物件寫入SQL資料庫.

步驟 1


先在 ODBC 管理員中新增 SQL Server ODBC 資料來源, 考慮連結名稱是R_SQL2008」.
步驟 2
考慮某 Northwind 資料庫, 其中包括 Orders 資料表, 如下圖所示.

步驟 3
先執行 library(RODBC), 再利用 odbcConnect 連結至SQL Server ODBC 資料來源, 最後配合 sqlQuery SQL 指令將資料匯入至R. class 結果可知為資料框架物件(data.frame). 利用 table 指令可計算各運送國家的個數. 平均數 mean 亦可加以使用.

步驟 4
考慮 Shippers 資料表有3筆記錄.

步驟 5
利用 names 指令可了解資料表欄位名稱

步驟 6
在 sqlQuery 中配合 INSERT INTO  指令可將R資料寫入SQL 資料庫, 其中第一個欄位(ShipperID)為自動編號主索引鍵, 因此該欄位不用加在 INSERT INTO 指令中, 最後再次讀取資料已新增為4筆.

步驟 7
新增資料 INSERT 語法如下: 

完整R code:

# end
謝謝 R user- Chang 提供此問題. 

5 則留言:

  1. 想請問一下,insert至sql的部份,只能一次一筆嗎?若是一整個R的data.frame想insert到sql中的表格,有建議的方法嗎?謝謝

    回覆刪除
    回覆
    1. 我也有同樣的問題,不知道你有找到解答了嗎?

      刪除
    2. RODBC似乎沒有批次寫入的功能,
      之前為了批次寫入,所以改用mariaDB,
      RMySQL可以用dbWriteTable。

      後來老闆要我改回Oracle,又回到RODBC這個坑,
      有找到ORDBCDBI這個package裡面也有dbWriteTable這個函數,
      但是還沒測試成功~

      刪除
    3. 自己把dataframe用apply包成insert query instring
      再一次送

      要注意以下幾點
      1. 資料型別對應
      2. 科學計號表示
      3. 空值NA->NULL
      4. 一個insert query string有限制長度,一般來說不得超過1000個Row

      我有空再把之前寫的code包一包丟到github上

      刪除