使用 R 和 SQL Server 的 Cron 作业

Posted

技术标签:

【中文标题】使用 R 和 SQL Server 的 Cron 作业【英文标题】:Cron Job with R and SQL Server 【发布时间】:2010-07-21 20:56:32 【问题描述】:

这可能是一个未充分说明的问题,因为我不是在寻找特定的解决方法:

我想对 SQL Server 数据库中的一些数据运行机器学习算法。我想使用 R 进行计算——这将涉及使用 R 连接到数据库、处理数据并将结果表写回数据库。

这可能吗?我的猜测是肯定的。使用客户端应该不是问题...

但是,是否可以在 linux 机器上将此设置为 cron 作业?

【问题讨论】:

【参考方案1】:

大家都同意!

如in this previous post 所述,您可以选择 Rscript 或更小的脚本。

由于难以从 Linux 连接到 MSSQL 数据库,我的建议是使用 RJDBC 来连接到 MSSQL 的数据库。我使用 RODBC 从 Windows 连接,但我无法让它在 Linux 中正常工作。要使 RJDBC 正常工作,您需要在 Linux 机器上正确安装 Java,并且可能需要更改一些环境变量(似乎我总是用 rJava 错误配置了一些东西)。您还需要下载并安装适用于 Linux 的 JDBC 驱动程序,您可以获取 directly from Microsoft。

安装 RJDBC 并安装驱动程序后,从数据库中提取数据的代码将类似于以下模板:

require(RJDBC)
drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver",
            "/etc/sqljdbc_2.0/sqljdbc4.jar")
conn <- dbConnect(drv, "jdbc:sqlserver://mysqlServer", "userId", "Password")
sqlText <- paste("
  SELECT  * 
  FROM SomeTable
       ;")
myData  <- dbGetQuery(conn, sqlText)

你可以用类似的东西写一个表格

dbWriteTable(conn, "myData", SomeTable, overwrite=TRUE)

当我对我的数据库进行更新时,我通常使用dbWriteTable() 在我的数据库服务器上创建一个临时表,然后我发出一个dbSendUpdate() 将临时表附加到我的主表然后第二个dbSendUpdate() 删除临时表。您可能会发现该模式很有用。

我遇到的唯一“问题”是我永远无法让 Windows 域/用户名在连接序列中工作。我必须设置一个单独的 SQL Server 帐户(如 sa)。

【讨论】:

【参考方案2】:

你可以编写一个包含 R 代码的脚本并将其放在第一行:

#!/usr/bin/env Rscript

更改文件权限以允许执行并放入 crontab 中,因为它是一个 bash 脚本。

【讨论】:

以上是关于使用 R 和 SQL Server 的 Cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux Centos 6.6 上使用 R 连接到 SQL Server

与 R/RStudio 建立 Microsoft SQL Server 连接

使用 R 更新 SQL Server 中表的多个列

使用 docker、rbase 和 RODBC 连接到 sql server 时出错

如何使用 R 向 SQL Server 表中插入数据?

使用 R 连接到远程 SQL Server