У меня установлено соединение с MySQL, размещенным на AWS.В настоящее время для массовой загрузки я использую функцию DBI dbWriteTable.Недостатком является то, что вставка data.frame с 10 тыс. Наблюдений занимает 5 минут.Я решил попробовать использовать запрос LOAD DATA INFILE, чтобы сократить время, необходимое для загрузки большого массива данных.Однако я получаю сообщение об ошибке, сообщающее, что моему текущему идентификатору пользователя запрещено выполнять такие команды.
Ниже приведен код, который я попробовал, и сообщение об ошибке.
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 не позволяет мне делать массовые загрузки.
Благодаря Матусу я решил проблему.Единственная проблема в том, что я получаю NA при массовой загрузке.
query = "LOAD DATA LOCAL INFILE 'mt.csv' INTO TABLE mtcars"