Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 无法写入红移数据帧_R_Amazon S3 - Fatal编程技术网

R 无法写入红移数据帧

R 无法写入红移数据帧,r,amazon-s3,R,Amazon S3,我能够使用RPostgreSQL包连接到AWS红移集群;读取表,甚至使用SQL-dbGetQuery创建表。但是,如果我试着像下面那样写一个data.frame(当con是一个dbConnect对象时)到redshift,而newdf是一个简单的data.frame dbWriteTable(con,"newtb",newdf) 我发现以下错误: postgresqlgetResult(new.con)中出错:RS-DBI驱动程序:(无法 检索结果:错误:不支持加载源。(提示: 仅允许基于S3

我能够使用RPostgreSQL包连接到AWS红移集群;读取表,甚至使用SQL-dbGetQuery创建表。但是,如果我试着像下面那样写一个data.frame(当con是一个dbConnect对象时)到redshift,而newdf是一个简单的data.frame

dbWriteTable(con,"newtb",newdf)
我发现以下错误:

postgresqlgetResult(new.con)中出错:RS-DBI驱动程序:(无法 检索结果:错误:不支持加载源。(提示: 仅允许基于S3或DynamoDB的负载)


我尝试了多个简单的data.frames,而读取data.frames有效。提示告诉我使用s3进行加载,这意味着我可以在R中处理数据,但不能将data.frames写回红移,除非我使用显式插入。知道我做错了什么吗?或者这是红移禁止或强制使用的固有方式s3

我使用RODBC包解决了这个问题

您需要设置一个ODBC连接,我们称之为redshift_con.从R开始,然后您需要使用以下方法创建一个连接(我称之为ch):


这是由于RPostgreSQL::dbWriteTable的工作方式-相反,您需要自己创建SQL(创建表、插入到…)并将其发送到数据库。感谢Hadley。创建SQL和插入正在工作。假设dbWriteTable由于redshift的非标准(不同)在这种情况下不工作postgresqlYes的实现,postgresql支持
复制到STDIN
,而redshift不支持(它只支持从S3或dynamodb加载)@hadley您能详细说明一下您的评论吗?您是说需要将insert语句构造为SQL查询吗?@Zach是的,对。RPostgreSQL用于将数据加载到postgres的方式不适用于红移
################ SAMPLE CODE FOR TESTING ##############
install.packages("RODBC")
library('RODBC')
ch <- odbcConnect("redshift_con", uid = "admin", pwd = "********")
sqlColumns(ch, "public.r_test")
USArrest<-data(USArrests)
sqlSave(redshift_con, USArrests, rownames = "State", addPK = TRUE, verbose = TRUE)
I'll post a comment on the process speed.