【问题标题】:How to import large Database Table into R如何将大型数据库表导入 R
【发布时间】:2019-05-06 13:02:28
【问题描述】:

我正在尝试将大型数据库表导入 R 以进行一些全局分析。 我使用 ROracle 连接到 Oracle DB 并使用 dbGetquery。 直接在查询中进行最小选择和必要的 where 子句以减少数据集的范围,但仍然是 1200 万行的 40 列。

我的电脑只有 8GB 内存,我该如何处理? 有没有办法将这些数据存储在磁盘上而不是 RAM 上?或类似的方式? 用 SAS 制造的东西也可以正常工作。

有什么想法吗?

【问题讨论】:

  • SAS 部分在磁盘上运行。好奇,你在 R 中用那个初始的大负载做什么?由于资源有限,请考虑在 Oracle 中运行计算、聚合等,并在 R 中导入最终结果集以满足最终使用需求,例如绘图、建模等。当今的数据库具有各种统计和分析功能。
  • 在我的情况下,我必须直接从 DB 中读取,我无法从 DB 中下载文件然后在 R 上读取它

标签: r database oracle


【解决方案1】:

几个想法:

  1. 是否可以在服务器端进行一些聚合?

  2. 您打算在 R 中处理这些数据,对吗?因此,您可以尝试不加载数据,而是创建 tbl 对象并在 R 中进行操作和聚合

    library(dplyr)

    my_tbl <- 'SELECT ... FROM ...' %>% sql() %>% tbl(con, .)

con 是您的联系人

【讨论】:

  • 不幸的是,R 中需要所有数据集来进行聚合、部分导出等...请解释方法 2 ...我的情况似乎很有趣
【解决方案2】:

这里有几个想法供您考虑。

library(RODBC)
dbconnection <- odbcDriverConnect("Driver=ODBC Driver 11 for SQL Server;Server=Server_Name; Database=DB_Name;Uid=; Pwd=; trusted_connection=yes")
initdata <- sqlQuery(dbconnection,paste("select * from MyTable Where Name = 'Asher';"))
odbcClose(channel)

如果您可以将表格导出为 CSV 文件...

require(sqldf)
df <- read.csv.sql("C:\\your_path\\CSV1.csv", "select * from file where Name='Asher'")
df

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 2016-04-08
    • 2011-01-27
    • 2016-07-16
    • 2011-10-19
    • 2016-11-29
    • 2016-04-04
    • 1970-01-01
    相关资源
    最近更新 更多