批量上传到托管在AWS上的MySQL

时间:2019-02-06 21:31:14

标签: mysql r amazon-web-services amazon-s3 mariadb

我与托管在AWS上的MySQL建立了连接。 目前,对于批量上传,我正在使用DBI dbWriteTable函数。不利的一面是,它需要5分钟才能插入具有1万观察值的data.frame。我决定尝试使用LOAD DATA INFILE查询来减少上传批量数据帧所需的时间。但是,我收到一条错误消息,告诉我我的当前用户ID被拒绝执行此类命令。

下面是我尝试过的代码,后面是错误消息。

library(RMariaDB)
library(DBI)

con = dbConnect(MariaDB(),
            dbname = "testing123",
            host = "********",
            user = "*****",
            password = "******", 
            port = 3306 
 )

dbWriteTable(con, "mt", mtcars)

##create a data frame that has about 6000 rows
mtcars.extended = cbind(mtcars, rep(unname(unlist(mtcars)), 20))

#use the standard dbwritetable to append the rows
dbWriteTable(con, "mt", mtcars, append = T)
###This took 5 minutes but worked

##So I decided to save mtcars.extended as a csv and try the bulk 
upload
write.table(mtcars.extended, "mtext.csv")

query = "LOAD DATA INFILE 'mtext.csv' INTO TABLE mt"

dbGetQuery(con, query)
Error in result_create(conn@ptr, statement, is_statement) : 
Error executing query: Access denied for user 'testing123'@'%' 
(using password: YES)

dbSendStatement(con, query)
 Error in result_create(conn@ptr, statement, is_statement) : 
 Error executing query: Access denied for user 'testing123'@'%' 
 (using password: YES)

我希望看到的是在数据表“ mt”中进行相对较快的插入,而没有任何覆盖。但是,似乎AWS不允许我进行批量上传。

感谢Matus,我解决了这个问题。唯一的问题是,批量上传时我得到了NA。

  query = "LOAD DATA LOCAL INFILE 'mt.csv' INTO TABLE mtcars"

enter image description here

1 个答案:

答案 0 :(得分:1)

我猜您正在谈论RDS MySQL。您尝试执行LOAD DATA INFILE查询时会看到该权限错误,这仅仅是因为您没有RDS受管系统的完全root权限。

您可以尝试将LOAD DATA LOCAL INFILE标志设置为true来运行--local-infile=1。这应该可行,因为您不需要该权限即可运行此查询。