在 R 中更快地读取 SQL 表

Posted

技术标签:

【中文标题】在 R 中更快地读取 SQL 表【英文标题】:Read SQL table faster in R 【发布时间】:2019-04-08 12:58:44 【问题描述】:

我正在做一个 R Shiny 项目,我需要从我的 Shiny 应用程序中读取 SQL 表。我尝试过使用 RODBC 和 RJDBC 包,并且发现 RJDBC 更快。但是还是要花很多时间阅读。

下面是我用过的代码:

LocationOfJDBC <- "/usr/lib/sqlserver_jdbc/sqljdbc_4.1/enu/jre7/sqljdbc41.jar"
options(java.parameters = "-Xmx8048m")
drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver" ,  LocationOfJDBC ,identifier.quote="`")

df<-dbGetQuery(mydb, "Select char1,char2,char3,int4,date5 from table1")

上述查询大约需要 90 秒来读取 280 万行和 5 列(3 个字符、1 个整数和 1 个日期列)。

有没有更快的方法在 R 中读取 SQL 表??

【问题讨论】:

我认为将这么多数据读入shiny 并不是一个好主意。使用 SQL 的聚合功能获取您需要的东西 【参考方案1】:

假设您已经尝试过诸如正确索引之类的明显解决方案,我建议您将大型​​ sql 表保存为磁盘上的快速文件传输格式。如果您需要查询表的功能,请使用包 fst,如果不需要,请使用包羽化。有各种线程比较这两个包。我的首选格式是 fst,因为它允许从磁盘进行查询。

install.packages("fst")
library(fst)
?fst

理想情况下,除非您的闪亮服务器确实需要所有 280 万行,否则我会进一步建议根据需要提取数据。

【讨论】:

以上是关于在 R 中更快地读取 SQL 表的主要内容,如果未能解决你的问题,请参考以下文章

R 如何实现更快读取数据 - 使用readr包

读取固定宽度文件的更快方法

如何才能拿R读取Excel文件

SQL基础:SQL命令

SQL的索引语句

如何在 selenium 中更快地从动态网站读取数据