我可以使用RPostgreSQL包连接到AWS redshift集群;读取表,甚至使用SQL创建表 - dbGetQuery。但是,如果我尝试编写如下的data.frame(如果将dbConnect对象转换为redshift,则为newdf,如果是简单的data.frame
dbWriteTable(con,"newtb",newdf)
我收到以下错误:
postgresqlgetResult(new.con)出错:RS-DBI驱动程序:(不能 检索结果:错误:不支持LOAD源。 (暗示: 只允许基于S3或DynamoDB的加载)
我尝试了多个简单的data.frames,而读取data.frame的作品却没有。提示告诉我使用s3进行加载,这意味着我可以处理R中的数据但不能将data.frame写回redshift,除非我使用显式插入。我有什么想法我做错了吗?或者如果这是红移的固有方式,则禁止或强迫您使用s3
答案 0 :(得分:1)
我使用RODBC包解决了。
您需要设置一个ODBC连接,我们可以将其称为redshift_con。从R开始,你需要使用:
创建一个连接(我称之为ch)ch< - odbcConnect(" Annalect DB",uid ="用户名",pwd =" **")
在R中加载我的数据框并运行:
sqlSave(ch,mydataframename,addPK = TRUE,verbose = TRUE)
R在redshift中创建一个名为" mydataframename"的新表。不是很快,如果找到并优化了方法,我会不断更新。
如果您需要更多信息,请参阅http://cran.r-project.org/web/packages/RODBC/index.html
################ SAMPLE CODE FOR TESTING ##############
install.packages("RODBC")
library('RODBC')
ch <- odbcConnect("redshift_con", uid = "admin", pwd = "********")
sqlColumns(ch, "public.r_test")
USArrest<-data(USArrests)
sqlSave(redshift_con, USArrests, rownames = "State", addPK = TRUE, verbose = TRUE)
I'll post a comment on the process speed.
希望它可以提供帮助。
更新
仅适用于非常少量的数据