如何快速将数据从R导出到SQL Server

jpd*_*527 18 sql sql-server r bigdata

由于非最小负载,标准RODBC软件包的sqlSave功能即使作为单个INSERT语句(参数fast = TRUE)也非常慢,因此对于大量数据而言非常慢.如何以最少的日志记录将数据写入我的SQL服务器,以便更快地写入?

目前尝试:

toSQL = data.frame(...);
sqlSave(channel,toSQL,tablename="Table1",rownames=FALSE,colnames=FALSE,safer=FALSE,fast=TRUE);
Run Code Online (Sandbox Code Playgroud)

jpd*_*527 31

通过在本地将数据写入CSV然后使用BULK INSERT(不像预先构建的功能那样可用sqlSave),可以非常快速地将数据写入MS SQL Server.

toSQL = data.frame(...);
write.table(toSQL,"C:\\export\\filename.txt",quote=FALSE,sep=",",row.names=FALSE,col.names=FALSE,append=FALSE);
    sqlQuery(channel,"BULK
                INSERT Yada.dbo.yada
                FROM '\\\\<server-that-SQL-server-can-see>\\export\\filename.txt'
                WITH
                (
                FIELDTERMINATOR = ',',
                ROWTERMINATOR = '\\n'
                )");
Run Code Online (Sandbox Code Playgroud)

SQL Server必须具有访问包含CSV文件的网络文件夹的权限,否则此过程将不起作用.虽然需要一些具有各种权限的设置(网络文件夹和BULK ADMIN权限,速度的奖励无限更有价值).

  • 你会这么认为,但是`BULK INSERT`命令很挑剔,想要一个`.txt`.该文件的实际内容与CSV相同; 唯一的区别是一个语句文件结束,使SQL愉快. (2认同)