我一直在尝试将在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 <- 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/