【问题标题】:Temporary tables using RMySQL使用 RMySQL 的临时表
【发布时间】:2012-06-24 22:43:39
【问题描述】:

有没有办法使用RMySQL 包创建一个临时表?如果是这样,正确的方法是什么?特别是我正在尝试将我的 R 会话中的数据框写入临时表。我有几个并行运行的进程,我不想担心名称冲突,这就是为什么我想让它们成为临时的,这样它们只对每个单独的会话可见。解决方案应该以某种方式涉及dbWritetable 而不是dbSendQuery("create temporary table tbl;")

注意:我在网上找到了一些建议使用dbSendQuery(con, "create temporary table x (x int)") 手动创建临时表,然后简单地用dbWriteTable() 覆盖它的东西。这不起作用。

【问题讨论】:

  • 在你的create temporary table 行之后运行dbSendQuery(con,"COMMIT") 可以解决问题吗?礼貌:stat.ethz.ch/pipermail/r-sig-db/2009q1/000575.html
  • 我会试一试的。谢谢你的建议!
  • 创建临时表后,尝试dbWriteTable(..., append=TRUE, overwrite=FALSE)。也可以使用另一个程序连接到数据库并检查表是否存在?

标签: sql r temp-tables rmysql


【解决方案1】:

根据你的mysql账户限制你可以不做

dbSendQuery(con, "create temporary table x (x int);")
dbSendQuery(con, "drop temporary table x;")

等等。

【讨论】:

  • 我应该更具体地回答我的问题。对不起。更新
【解决方案2】:

对于这种类型的工作,我会避免重新发明轮子并使用

https://code.google.com/p/sqldf/

默认情况下,它适用于 sqlite,但它也适用于 MySQL(我从未尝试过)。这个包坚如磐石并且有据可查。

【讨论】:

    【解决方案3】:

    这实际上是一个known issue in RMySQL。您最好的选择可能是将数据写入临时文件,然后使用 RMySQL::mysqlWriteTable 作为指导构建您自己的 LOAD DATA LOCAL INFILE 语句。

    对于奖励积分,如果您可以修补 RMySQL::mysqlWriteTable 以使用临时文件,请向 github repo 发送拉取请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 2014-01-11
      相关资源
      最近更新 更多