【问题标题】:Import data from SQL Server to R将数据从 SQL Server 导入到 R
【发布时间】:2020-12-04 19:05:49
【问题描述】:

我正在尝试将数据从 SQL Server 导入到 R。我获得了 SQL Server 数据库的服务器名称、用户名和密码。我已经在 R 中安装了 RODBC。但我不知道如何编写 odbcConnect 搜索,因为我的计算机上没有数据库,我只知道服务器名称。在这种情况下我该怎么办?谢谢!

【问题讨论】:

  • 请继续您的research,您可能会为您的广泛问题找到答案。带着具体问题回到这里,认真尝试解决问题。

标签: sql r database import


【解决方案1】:

这是使用DBI+odbc 包的典型SQL Server 连接:

library(DBI)
library(odbc)

conn <- DBI::dbConnect(
    odbc::odbc(),
    Driver = "SQL Server",
    Server = "ServerName",
    Database = "DatabaseName",
    uid = "UserName",
    pwd = "Password",
    options(connectionObserver = NULL)
  )

data <- dbGetQuery(conn, "SELECT * FROM ...")

DBIrecommended by R Studiofaster than RODBC。 @r2evans 致 checking this

【讨论】:

  • 我开始使用 RODBC,然后切换到 DBI,因为我发现它在很多情况下确实更快,但我没有记录并排比较。下周我将尝试在一些数据上进行此操作,以用事实证实这一印象。
  • 报告平均 5 次重复:Write (head(nycflights13::flights[,-19],10000)): DBI::dbWriteTable RODBC::sqlSave 80sec; 读取 (10K):DBI::dbGetQuery 0.06 秒,RODBC::sqlQuery 0.10 秒。然后我插入了所有 336K 行,然后重新执行 Read (336K):odbc 2.6sec,rodbc 3.5sec。 DB 是 win10 R-4.0.2、DBI-1.1.0、odbc-1.2.2、RODBC-1.3.17 上的本地 docker (microsoft/mssql-server-linux)。 (这证明了我使用 DBI ... 在给定的周末,我 写入 2-10M 行数据,使 nycflights13::flights 的 336K 行相形见绌。)(我只测试了这两个函数,效率可能存在)。
  • 刚刚使用RODBCDBI 测试了 336K 读取,平均时间为 4.43 秒。不会慢一个数量级,但读取速度肯定会慢一点。我猜写入与原始RODBC 没有显着差异。然后我尝试了DBI::dbReadTableRODBC::sqlFetch(原始的全表加载,不是查询):odbc 2.05sec,rodbc 3.25sec,rodbcdbi 2.88sec。
  • 对于写作,很可能是因为RODBC插入了one row at a time,而odbc利用了batched rows and/or parameter-binding
  • 瓦尔迪,gist.github.com/r2evans/1ea2a1de11fc1f0aa391f9977766ccecDBI/odbc 的速度更快,我并不感到惊讶,但我震惊地发现差异有多么显着。我不应该对RODBCDBI 没有增加(很多/任何?)开销感到惊讶。 (但我相信这是一个更完整的比较。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 2015-08-26
  • 2012-03-11
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多