【问题标题】:Alternate for dbwritetable to write tables from R to sql server备用 dbwritetable 将表从 R 写入 sql server
【发布时间】:2018-03-12 05:06:22
【问题描述】:

我有一个超过 4000 行和大约 10 列的本地数据框。目前使用 dbWriteTable 函数使用 R 将表写入 SQL 服务器。但是速度很慢(需要 30 多分钟) 是否有任何替代方法可以让我更快地做到这一点?

【问题讨论】:

  • SQL Server 还是 MySql?
  • SQL Server 是
  • 微软 SQL Server?

标签: sql r sql-insert rmysql


【解决方案1】:

考虑将数据框导出到 csv 并运行 SQL Server 的BULK INSERT

BULK INSERT myNewTable
FROM 'C:\Path\To\File.csv'
WITH
  (
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',  
    ROWTERMINATOR = '\n',  
    TABLOCK
  )

或者,将 csv 保存为 Excel 格式 (.xlsx) 或直接从 R 保存为 Excel 格式,然后在生成表操作中运行 distributed query

-- Adjust path and sheet name
SELECT * 
INTO myNewTable
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
   'Data Source=C:\Path\To\File.xlsx;Extended Properties=Excel 12.0')...SheetName$ 


SELECT * 
INTO myNewTable
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
   'Data Source=C:\Path\To\File.xlsx;Extended Properties=Excel 12.0', SheetName$)

注意事项

  • Bulk operations must be granted 用户调用该操作是服务器级别的权限而不是数据库级别的权限。因此,您可能无法通过 R 运行命令,而是在 SSMS 控制台中运行。
  • 必须在数据库上启用 Ad Hoc Distributed queries 才能连接到使用 OLE DB 的远程数据源。
  • 分布式查询假定 SQL Server 和 MS Office 采用相同的位架构:两者都安装了 Access 引擎的 64 位安装。如果没有,可以免费下载 MS 2007/2010/2013/2016。见2016。如果 SQL Server 是 32 位,请使用旧版 Microsoft.JET.OLEDB.4.0 并将 Excel 文件保存为旧版 .xls 格式,属性为 Excel 8.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 2020-09-01
    • 2020-05-02
    • 2020-07-27
    • 2022-06-11
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多