【问题标题】:What is the fastest way to load huge .Rdata files (R dataframes) into SQL Server?将巨大的 .Rdata 文件(R 数据帧)加载到 SQL Server 中的最快方法是什么?
【发布时间】:2017-06-09 00:51:42
【问题描述】:

我目前通过以下方式使用库(RODBC):

dbhandle <- odbcDriverConnect('driver={SQL Server};server=xxxxxx;database=yyyy;trusted_connection=true')
sqlSave(dbhandle, R_table ,tablename = "SQL_table" )

这个问题是,将 1000 万行加载到 SQL Server 大约需要 5 个小时。

有时加载时会中断。因此,我将 .Rdata 分解为更小的块,并按顺序将其加载到 SQL Server 中。

有没有更快的方法来实现这一点?

【问题讨论】:

    标签: sql-server r dataframe rodbc bigdata


    【解决方案1】:

    我会以 CSV 格式导出我的数据并使用BULK INSERT。如果您真的想要(或必须)使用 sqlSave,那么,我想到的唯一选择是:

    1. 一定要在sqlSave中设置fast=TRUE
    2. 在运行 sqlSave 之前设置自动提交关闭:odbcSetAutoCommit(dbhandle, autoCommit = FALSE) 并在 sqlSave 之后提交 odbcEndTran(dbhandle, commit = TRUE)

    但是,在我看来,真正的解决方案是 BULK INSERT。

    【讨论】:

    • 谢谢@mauro。是的,我正在寻找 R 特定的解决方案。我会尝试你的建议,但你认为有没有办法并行运行导出并将进程分配给核心?或者是否有任何 Rx 包可以提供帮助?
    • @SVK 认为您不能轻松地并行化 sqlSave()。重新批量插入,您可以从 RODBC 运行它:stackoverflow.com/questions/37688685/…
    • 您的回答很有帮助,您能否分享使用 RODBC 进行 BULK INSERT 的语法。
    • @SVK 类似sqlQuery(connectionHandle, 'BULK INSERT &lt;my.target.table&gt; FROM &lt;myfile&gt; WITH...')?我没有要测试的 SQL Server 实例,但我在数据库中使用了类似的东西......
    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2011-07-16
    • 2011-01-24
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多