有没有更快的方法将数据从R上传到MySql?
我使用以下代码将一个新表上传到mysql数据库中有没有更快的方法将数据从R上传到MySql?,mysql,r,rodbc,rmysql,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
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)
库(RMySql)
图书馆(RODBC)
con您可以尝试禁用mysql查询日志:
dbSendQuery(con, "SET GLOBAL general_log = 'off'")
我无法判断您的mysql用户帐户是否具有相应的权限,或者它是否与您的业务需求相冲突
我的想法是:否则,您可以尝试使用Rscript中的for循环,以1000行为一批发送数据,或者在调用sqlSave
如果您在单个批中发送数据,Mysql可能会尝试将INSERT作为单个事务运行(“全部或无”),如果失败,它将进入恢复或只是在插入一些随机数的行后失败 考虑从R导出CSV以导入MySQL,其中包含:
是的,它们相应的命令行加载器通常被推荐用于MySQL、PostgreSQL等。。。由于进程批量更新比正在运行的sqlSave()
或dbWriteTable()
更好(可能是逐行更新)。当我使用此方法时,我在.local(conn,statement,…)中得到了错误错误:无法运行语句:在查询过程中与MySQL服务器失去了连接
。有什么建议吗?嗯……把这个查询放在一个.sql脚本中,并通过(黑盒命令行)运行它。您将使用source/path/to/filename.sql调用它代码>如果运行成功,R就是问题所在代码>和我得到了一个“拒绝访问”错误,所以问题似乎是我的权限。谢谢你的帮助!尝试授予您的用户此类权限或让db管理员设置。
...
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'")