从R写入db表的最快方法是什么?

时间:2014-05-09 19:37:03

标签: sql sql-server r ssis

我在R中有一个1.5M行的数据表。我想将其导出到MS SQL数据库表。

我知道我可以这样做:

dbWriteTable(conn,"benefit_custom.Trial_set",trial_set )

但它很慢。

我尝试的另一个选项是写入一个平面文件然后创建一个SSIS pkg以将其传输到db。这不是问题,但问题是我的数据表中有字符串和数字数据,当R写入文件时,所有内容都是varchar并且用引号括起来。

FileLocation <-"\\Benefit_Analysis_Input.dat"

 FileName<- paste( bcpWorkspace,FileLocation,sep = "") 

write.table(trial_set,file =FileName,append = FALSE, sep = "\t",col.names = T, row.names = F) 

第一种方法保留了我想要的数据类型,但性能非常糟糕。有没有人可以尝试其他任何东西?

所以我想如果我正在写一个平面文件,数据类型就无法保留,所以当我将平面文件导入数据库时​​,我必须选择数据类型

2 个答案:

答案 0 :(得分:1)

回答你的问题:最快的似乎是rsqlserver

截至目前,我知道:

  • rsqlserver:仅在win OS上使用 System.Data.SqlClient 驱动程序
  • RSQLServer:使用RJDBC
  • 从任何操作系统使用Java驱动程序到SQLserver
  • RODBC:使用ODBC驱动程序,只在win OS上轻松设置

从R会话的角度来看,仍然是微软的SQL服务器支持得很差。

这是rsqlserver项目的有趣基准:https://github.com/agstudy/rsqlserver/wiki/benchmarking

rsqlserver相关的注意事项也很重要:计划使用mono的Linux版本。

最后,我最近关于Data Warehousing with R的演讲涵盖了DBI,RJDBC,RODBC的例子。

答案 1 :(得分:-1)

我认为@rhealitycheck走在正确的轨道上 - 我会使用SQL导入和导出数据向导来生成SSIS包。我会保存它并在以后自定义它,例如添加一个上游的Execute Process Task来调用R并写出文本文件。

这种解决方案的性能和灵活性很难被击败。