Ошибка при массовой загрузке на MySQL, размещенную на AWS - PullRequest
0 голосов
/ 07 февраля 2019

У меня установлено соединение с 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"

enter image description here

1 Ответ

0 голосов
/ 07 февраля 2019

Я думаю, вы говорите о RDS MySQL.Вы видите эту ошибку разрешения при попытке выполнить запрос LOAD DATA INFILE просто потому, что у вас нет полного разрешения root для управляемой системы RDS.

Вместо этого вы можете попробовать запустить LOAD DATA LOCAL INFILE с флагом --local-infile=1, установленным вправда.Это должно работать, так как вам не нужны эти разрешения для выполнения этого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...