使用 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 连接