【问题标题】:Create a stored procedure using RMySQL使用 RMySQL 创建存储过程
【发布时间】:2016-03-17 23:33:03
【问题描述】:

背景:我正在开发一个 rscript,它从 mysql 数据库中提取数据,执行逻辑回归,然后将预测插入回数据库中。我希望整个系统都包含在脚本中,以防数据库发生故障。这包括脚本依赖于聚合后端数据的所有 mysql 存储过程,因为这些存储过程将在此类数据库故障中被删除。

问题:我在从 R 脚本创建存储过程时遇到问题。我正在运行以下命令:

mySQLDriver <- dbDriver("MySQL")
connect <- dbConnect(mySQLDriver, group = connection)
query <- 
"
DROP PROCEDURE IF EXISTS Test.Tester;
DELIMITER //
CREATE PROCEDURE Test.Tester()
BEGIN
/***DO DATA AGGREGATION***/
END // 
DELIMITER ;
"
sendQuery <- dbSendQuery(connect, query)
dbClearResult(dbListResults(connect)[[1]])
dbDisconnect(connect)

然而,我收到以下似乎涉及 DELIMITER 更改的错误。

Error in .local(conn, statement, ...) : 
  could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //
CREATE PROCEDURE Test.Tester()
BEGIN
/***DO DATA AGGREGATION***/
EN' at line 2

我做了什么:我花了很多时间寻找答案,但一无所获。我错过了什么?

【问题讨论】:

  • 为什么不把数据读入R,然后用R做聚合、统计等,再写回数据库?
  • 也许您必须在 SQL 查询中转义反斜杠。
  • 我最初是这样做的,但数据量很快就填满了内存。虽然我熟悉规避此问题的工具,但我的团队有兴趣使用 MySQL 进行数据繁重的工作,以实现可重复性和冗余。 (公司很少使用 R)
  • 在 MySQL 客户端中执行您的查询是否有效?
  • @hadley 它确实在 MySQL Workbench 和 Mac 终端中运行。我认为 MySQL 语法错误可能是由于 MySQL 无法识别 DELIMITER 语句。

标签: r rmysql


【解决方案1】:

只是想跟进这串 cmets。感谢您对这个问题的看法。我有几个 Python 脚本需要具有此功能,我开始研究 Python 的相同主题。我发现this question 表明了答案。问题说明:

“DELIMITER 命令是内置的 MySQL shell 客户端,只有该程序(和 MySQL 查询浏览器)才能识别。如果直接通过 API 执行 SQL 语句,则不需要使用 DELIMITER。

DELIMITER 的目的是帮助您避免在 CREATE FUNCTION 语句的终止时出现歧义,因为语句本身可以包含分号字符。这在 shell 客户端中很重要,默认情况下,分号终止 SQL 语句。您需要将语句终止符设置为其他字符才能提交函数(或触发器或过程)的主体。”

因此以下代码将在 R 中运行:

mySQLDriver <- dbDriver("MySQL")
connect <- dbConnect(mySQLDriver, group = connection)
query <- 
"
CREATE PROCEDURE Test.Tester()
BEGIN
/***DO DATA AGGREGATION***/
END
"
sendQuery <- dbSendQuery(connect, query)
dbClearResult(dbListResults(connect)[[1]])
dbDisconnect(connect)

【讨论】:

  • @Andrew Redd▬ 我想听听你关于同时使用 mysql 和 R 的一些想法。我开始学习将 R 与数据库集成以进行内存不足分析,并在我的笔记本电脑上安装 mysql 服务器。您能否分享一些关于编写存储过程的好处的想法,以及“虽然我熟悉绕过这个问题的工具,但我的团队有兴趣使用 MySQL 进行数据繁重的工作”是什么意思?什么工具?展望未来,我很难克服这样一个事实,即如果我必须将数据查询到 R 中,仍然存在 RAM 限制的挑战。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-03-21
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多