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权限,速度的奖励无限更有价值).