2

我能够使用 RPostgreSQL 包连接到 AWS redshift 集群;读取表,甚至使用 SQL - dbGetQuery 创建表。但是,如果我尝试如下编写一个 data.frame(其中 con 是一个 dbConnect 对象到 redshift 中,如果是一个简单的 data.frame 则为 newdf

dbWriteTable(con,"newtb",newdf)

我收到以下错误:

postgresqlgetResult(new.con) 中的错误:RS-DBI 驱动程序:(无法检索结果:错误:不支持加载源。(提示:仅允许基于 S3 或 DynamoDB 的加载)

我尝试了多个简单的 data.frames,而读取 data.frame 的作品却没有。提示告诉我使用 s3 进行加载,这意味着我可以在 R 中处理数据,但不能将 data.frame 写回 redshift,除非我使用显式插入。任何想法我做错了什么?或者如果这是 redshift 禁止或强制您使用 s3 的固有方式

4

1 回答 1

1

我使用 RODBC 包解决了。

您需要建立一个 ODBC 连接,我们称之为 redshift_con。从R比你需要创建一个连接(我称之为ch)使用:

ch <- odbcConnect("Annalect DB", uid = "username", pwd = "**")

在 R 中加载我的数据框并运行:

sqlSave(ch, mydataframename, addPK = TRUE, 详细 = 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.

希望它可以提供帮助。

更新

仅适用于非常少量的数据

于 2014-09-11T12:34:22.017 回答