我在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)
第一种方法保留了我想要的数据类型,但性能非常糟糕。有没有人可以尝试其他任何东西?
所以我想如果我正在写一个平面文件,数据类型就无法保留,所以当我将平面文件导入数据库时,我必须选择数据类型
答案 0 :(得分:1)
回答你的问题:最快的似乎是rsqlserver
截至目前,我知道:
RJDBC
从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并写出文本文件。
这种解决方案的性能和灵活性很难被击败。