【问题标题】:Is there a faster way to upload data from R to MySql?有没有更快的方法将数据从 R 上传到 MySql?
【发布时间】:2017-11-01 11:17:14
【问题描述】:

我正在使用以下代码将新表上传到 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 万行。将 50,000 行上传到 MySql 需要 90 多分钟。有没有更有效的方法将数据上传到 MySql。我最初尝试过dbWriteTable(),但这会导致错误消息提示与数据库的连接丢失。

【问题讨论】:

  • 是的,它们对应的命令行加载器通常推荐用于 MySQL、PostgreSQL 等,因为进程批量更新比(可能逐行)操作 sqlSave() 或 @ 更好987654324@.

标签: mysql r rodbc rmysql


【解决方案1】:

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

dbSendQuery(con, "SET GLOBAL general_log = 'off'")

我不知道您的 mysql 用户帐户是否具有执行此操作的适当权限,或者它是否与您的业务需求相冲突。

我不以为然:否则,您可以尝试使用 Rscript 中的 for- 循环,或者在您对 sqlSave 的调用中使用选项 verbose = true,以 1000 行批次的形式发送数据

如果您在单个批次中发送数据,Mysql 可能会尝试将 INSERT 作为单个事务(“all-or-nothing”)运行,如果失败,它将进入恢复状态,或者在插入一些随机数后失败行。

【讨论】:

    【解决方案2】:

    考虑从 R 导出 CSV 以使用 LOAD DATA INFILE 导入 MySQL:

    ...
    write.csv(df, "/path/to/filename.csv", row.names=FALSE)
    
    dbSendQuery(con, "LOAD DATA LOCAL INFILE '/path/to/filename.csv'
                      INTO TABLE mytable
                      FIELDS TERMINATED by ','
                      ENCLOSED BY '"'
                      LINES TERMINATED BY '\\n'")
    

    【讨论】:

    • 当我使用此方法时,我收到错误Error in .local(conn, statement,...): could not run statement: Lost connection to MySQL server during query。有什么建议吗?
    • 嗯...将此查询放入 .sql 脚本并通过 MySQL cli(黑盒命令行)运行它。您将使用source /path/to/filename.sql; 调用它如果成功运行,R 就是问题所在。
    • 所以,我尝试了SET GLOBAL local_infile = 1;,但出现“拒绝访问”错误,所以看来问题出在我的权限上。感谢大家的帮助!
    • 尝试授予您的用户此类权限/权限或让数据库管理员进行设置。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2018-08-09
    • 2021-12-19
    相关资源
    最近更新 更多