redshift data.frame没有写入

时间:2013-10-02 03:50:28

标签: r amazon-s3

我可以使用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

1 个答案:

答案 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.

希望它可以提供帮助。

更新

仅适用于非常少量的数据