R 連接關聯式資料庫有兩大流派:通用 **ODBC** (套件 RODBC) 與原生 **DBI** 介面 (各資料庫專用套件)。本文比較兩者優劣並以 SQLite + RSQLite 示範 DBI 完整工作流。
| 維度 | ODBC (RODBC) | DBI (RMySQL/RSQLite/...) |
|---|---|---|
| 架構 | 統一 ODBC 驅動管理器 → 各 DB ODBC 驅動 | R 直接呼叫各 DB 客戶端庫 (libmysqlclient, sqlite3 等) |
| 跨資料庫可攜性 | 高 (同一組 API) | 中 (DBI 介面一致,但 SQL 方言仍有差異) |
| 效能 | 多一層轉換,略低 | 原生呼叫,效能最佳 |
| 功能完整性 | 受限於 ODBC 驅動實作 | 可使用資料庫特有功能 |
| 部署複雜度 | 需安裝 unixODBC + 各 DB ODBC 驅動 | 僅需對應 R 套件 (含客戶端庫) |
主流 DBI 套件:
RMySQL / MariaDBRSQLite (內嵌輕量級,免安裝、免設定、免管理)ROracleRPostgreSQL# 目錄結構
sqlite/
sqlite3.exe
Scheme.sql # 建表
Data.sql # 匯入資料
train.db # 產出資料庫檔
.read Scheme.sql
.read Data.sql
.backup train.db
install.packages('RSQLite')
library(RSQLite)
con <- dbConnect(SQLite(), dbname='d:/sqlite/train.db')
dbListTables(con)
dbListFields(con, 'Apply')
sql <- "select sName, GPA, decision, cName
from Student, Apply
where Student.sID = Apply.sID
and sizeHS < 1000 and major = 'CS' and cName = 'Stanford'"
data <- dbGetQuery(con, sql)
print(data)
dbDisconnect(con)
