将数据从 R 写入 Redshift 问题

Posted

技术标签:

【中文标题】将数据从 R 写入 Redshift 问题【英文标题】:Writing Data from R to Redshift issue 【发布时间】:2017-04-20 19:34:38 【问题描述】:

我一直在尝试将在 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 中的数据帧的每一行循环,我找到了一个非常慢的解决方案。这告诉我问题必须与权限以外的其他内容有关,因为我可以低效地完成任务。

非常感谢任何与此错误相关的 cmets 或建议,谢谢。

【问题讨论】:

以前地址:***.com/questions/19129698/… 【参考方案1】:

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

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

【讨论】:

以上是关于将数据从 R 写入 Redshift 问题的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift - 复制 - 数据加载与查询性能问题

如何在写入 Redshift DW 之前从 S3 存储桶转换数据?

如何使用 ruby​​ 将单个记录写入 Redshift 数据库?

使用 Psycopg2 从 Redshift 写入文件引发异常

从 R 连接到 Redshift 数据库

AWS:使用从 s3 到 redshift 的复制命令时没有插入任何内容