【问题标题】:redshift data.frame not getting writtenredshift data.frame 没有被写入
【发布时间】:2013-10-02 03:50:28
【问题描述】:

我能够使用 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 的固有方式

【问题讨论】:

  • 这是由于 RPostgreSQL::dbWriteTable 的工作方式造成的 - 相反,您需要自己创建 SQL(CREATE TABLE、INSERT INTO、...)并将其发送到数据库。
  • 谢谢哈德利。创建 SQL 并插入正在工作。假设由于 redshift 对 postgresql 的非标准(不同)实现,dbWriteTable 在这种情况下无法工作
  • 是的,postgresql 支持 COPY INTO STDIN 而 redshift 不支持(它只支持从 S3 或 dynamodb 加载)
  • @hadley 您能否详细说明您的评论?您是说需要将插入语句构造为 SQL 查询?
  • @Zach 是的,对。 RPostgreSQL 用于将数据加载到 postgres 的方式不适用于 redshift

标签: r amazon-s3


【解决方案1】:

我使用 RODBC 包解决了。

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

ch

在 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.

希望对你有帮助。

更新

仅适用于非常少量的数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 2012-06-04
    • 2011-04-16
    • 1970-01-01
    • 2019-11-19
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多