有没有更快的方法将数据从R上传到MySql?

时间:2017-05-31 15:06:46

标签: mysql r rodbc rmysql

我使用以下代码将新表上传到mysql数据库。

library(RMySql)
library(RODBC)

con <- dbConnect(MySQL(),
  user = 'user',
  password = 'pw',
  host = 'amazonaws.com',
  dbname = 'db_name')

dbSendQuery(con, "CREATE TABLE table_1 (
        var_1 VARCHAR(50),
        var_2 VARCHAR(50),
        var_3 DOUBLE,
        var_4 DOUBLE);
        ")

channel <- odbcConnect("db name")
sqlSave(channel, dat = df, tablename = "tb_name", rownames = FALSE, append = 
TRUE)

完整的数据集是68个变量和500万行。上传5万行到MySql需要90多分钟。有没有更有效的方法将数据上传到MySql。我最初尝试dbWriteTable()但这会导致错误消息,说明与数据库的连接丢失了。

2 个答案:

答案 0 :(得分:3)

考虑从R导出CSV,以便LOAD DATA INFILE导入MySQL:

industry

答案 1 :(得分:0)

您可以尝试禁用mysql查询日志:

verbose = true

我无法判断您的mysql用户帐户是否具有相应的权限,或者是否与您的业务需求相冲突。

脱离我的头脑:否则您可以尝试使用Rscript中的for循环以1000行批量发送数据,也可以在调用{{1}时选择sqlSave }

如果您在一个批处理中发送数据,Mysql可能会尝试将INSERT作为单个事务运行(&#34;全有或全无&#34;)如果它失败则会进入恢复状态或者在执行后失败插入一些随机数的行。