r - 将数据从R写入Redshift问题

标签 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的数据帧的每一行。这告诉我问题必须与权限以外的其他东西有关,因为我可以低效地完成任务。

    与这个错误有关的任何意见或建议,我们将不胜感激,谢谢。

    最佳答案

    您的客户端“R”应用程序似乎正在尝试使用Postgres COPY ... FROM STDIN语法。 Redshift COPY命令不支持“FROM STDIN”语法,请参见Redshift COPY

    您可能考虑的选项是逐行插入(就像对dbSendQuery()所做的那样),但这会很慢,或者将数据输出到可以上传到Amazon S3并从其中使用COPY with S3 as a data source加载的CSV文件中(快速) 。

    关于r - 将数据从R写入Redshift问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43528370/

    相关文章:

    python - 每当抛出警告时退出

    r - 多次尝试一个表达式,直到它在 R 中成功

    sql - POSTGRESQL 函数中的 CASE-WHEN

    文件同步时Java网络错误

    actionscript-3 - 调度错误事件时,ActionScript 3.0类型强制失败

    sql - 在postgresql中显示表的唯一属性和总值

    在 R 中多次运行 'prop.test'

    r - 在 R 中,究竟是什么导致了名称(或符号)类型的对象被求值?

    removeWords 不起作用

    postgresql - 将 PostgreSQL 数据库加载到 SchemaRDD