繁体   English   中英

替代dbwritetable以将表从R写入SQL Server

[英]Alternate for dbwritetable to write tables from R to sql server

我有超过4000行和大约10列的本地数据框。 当前使用dbWriteTable函数使用R将表写入SQL Server。但是,它的运行速度非常慢(耗时30分钟以上),是否可以使用其他替代方法来更快地完成此操作?

考虑将数据帧导出到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格式,然后在生成表操作中运行分布式查询

-- 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$)

笔记

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM