将数据从R写入Redshift问题

时间:2017-04-20 19:34:39

标签: r postgresql error-handling amazon-redshift

我一直在尝试将在R服务器上的工作空间中创建的数据推送回Redshift。使用dbWriteTable(),我可以成功创建表,但数据没有写入这个新创建的表,并产生以下错误:

> dbWriteTable(con, c("schema", "table"), value = df,append=TRUE, 
row.names=FALSE)

Error in postgresqlpqExec(new.con, sql4) : 

  RS-DBI driver: (could not Retrieve the result : ERROR:  syntax error at or 
near "STDIN"
LINE 1: COPY "schema"."table" FROM STDIN
                                      ^
)

关于代码的说明:

  • 'con'指的是Redshift连接,通用形式的代码如下:

    con <- dbConnect(drv, host="host_name",
                     port="port_id",
                     dbname="db_name",
                     user="username",
                     password="password")
    
  • 由于数据限制,我无法提供完整的数据示例。

最初,我认为这可能是工作空间中的权限问题。但是,通过使用dbSendQuery()创建表,然后循环遍历数据帧的每一行,我希望通过另一个对dbSendQuery()的调用插入到Redshift中,我找到了一个非常慢的解决方案。这告诉我问题必须与其他权限相关,因为我可以无效地完成任务。

非常感谢您对此错误提出的任何意见或建议,谢谢。

1 个答案:

答案 0 :(得分:1)

看起来像你的客户&#34; R&#34;应用程序正在尝试使用Postgres COPY ... FROM STDIN语法。 &#34;来自STDIN&#34; Redshift COPY命令不支持语法,请参阅Redshift COPY

您可能考虑的选项是逐行插入(就像您使用dbSendQuery()一样),但这会很慢,或者将您的数据输出到CSV文件,该文件可以上传到Amazon S3并从那里加载{ {3}}(快)。