将数据从 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 数据库?