2017-04-20 111 views
-1

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

  • > 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”指的是红移连接,以通用形式用于该代码如下:

    con <- dbConnect(drv, host="host_name", 
           port="port_id", 
           dbname="db_name", 
           user="username", 
           password="password") 
    
  • 我不能得到具有充分的数据的例子,由于在th限制e数据。

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

有任何意见或与此相关的错误的建议是非常感谢,谢谢。

回答

1

它看起来像你的客户“R”应用程序试图使用的Postgres COPY ... FROM STDIN语法。 Redshift COPY命令不支持“FROM STDIN”语法,请参见Redshift COPY

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