在R中使用odbc从已激活的SQL Server连接导入指定表为数据框
R 拉取 SQL Server 表到本地数据框的操作方法
首先确保你已经安装了必要依赖包,没有的话先执行安装:
install.packages(c("DBI", "odbc", "tibble", "dplyr", "dbplyr"))
方法1:直接拉取全表转为 data frame/tibble
- 第一步:通过已配置的DSN建立数据库连接
library(DBI) library(odbc) # 替换参数:dsn填你本地配置的DSN名称,如需账号密码可新增UID、PWD参数 con <- dbConnect( odbc(), dsn = "你配置的DSN名称", database = "AdventureWorks2019" # UID = "你的账号", # PWD = "你的密码" )
- 第二步:拉取指定架构下的表
# 方案A:直接读取表,返回data frame credit_card_df <- dbReadTable(con, DBI::Id(schema = "Sales", table = "CreditCard")) # 转为tibble格式 library(tibble) credit_card_tbl <- as_tibble(credit_card_df)
# 方案B:通过自定义SQL查询拉取,适合需要提前过滤数据的场景 query_sql <- "SELECT * FROM Sales.CreditCard" credit_card_df <- dbGetQuery(con, query_sql) credit_card_tbl <- as_tibble(credit_card_df)
- 操作完成后断开数据库连接
dbDisconnect(con)
方法2:惰性查询(适合大表,避免先拉全量占用内存)
借助dbplyr可以先映射远程数据库表,在远端完成过滤、聚合等计算后再拉取结果到本地:
library(dplyr) library(dbplyr) # 建立连接的代码和方法1一致 con <- dbConnect( odbc(), dsn = "你配置的DSN名称", database = "AdventureWorks2019" ) # 映射Sales架构下的CreditCard远程表 remote_credit_card <- tbl(con, in_schema("Sales", "CreditCard")) # 按需做数据处理后再拉取到本地转为tibble,示例:取CardType为"Vista"的记录 credit_card_tbl <- remote_credit_card %>% filter(CardType == "Vista") %>% collect()
补充说明
如果你已经在RStudio连接面板中打开了该连接,无需重复执行dbConnect建立连接,直接执行拉取表的代码即可。
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

