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 提供此問題.
想請問一下,insert至sql的部份,只能一次一筆嗎?若是一整個R的data.frame想insert到sql中的表格,有建議的方法嗎?謝謝
回覆刪除我也有同樣的問題,不知道你有找到解答了嗎?
刪除RODBC似乎沒有批次寫入的功能,
刪除之前為了批次寫入,所以改用mariaDB,
RMySQL可以用dbWriteTable。
後來老闆要我改回Oracle,又回到RODBC這個坑,
有找到ORDBCDBI這個package裡面也有dbWriteTable這個函數,
但是還沒測試成功~
自己把dataframe用apply包成insert query instring
刪除再一次送
要注意以下幾點
1. 資料型別對應
2. 科學計號表示
3. 空值NA->NULL
4. 一個insert query string有限制長度,一般來說不得超過1000個Row
我有空再把之前寫的code包一包丟到github上
改用ROracle吧~~~~~
回覆刪除