【发布时间】: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 语句。