【发布时间】:2010-07-21 20:56:32
【问题描述】:
这可能是一个未充分说明的问题,因为我不是在寻找特定的解决方法:
我想对 SQL Server 数据库中的一些数据运行机器学习算法。我想使用 R 进行计算——这将涉及使用 R 连接到数据库、处理数据并将结果表写回数据库。
这可能吗?我的猜测是肯定的。使用客户端应该不是问题...
但是,是否可以在 linux 机器上将此设置为 cron 作业?
【问题讨论】:
标签: sql-server r cron
这可能是一个未充分说明的问题,因为我不是在寻找特定的解决方法:
我想对 SQL Server 数据库中的一些数据运行机器学习算法。我想使用 R 进行计算——这将涉及使用 R 连接到数据库、处理数据并将结果表写回数据库。
这可能吗?我的猜测是肯定的。使用客户端应该不是问题...
但是,是否可以在 linux 机器上将此设置为 cron 作业?
【问题讨论】:
标签: sql-server r cron
大家都同意!
如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)。
【讨论】:
你可以编写一个包含 R 代码的脚本并将其放在第一行:
#!/usr/bin/env Rscript
更改文件权限以允许执行并放入 crontab 中,因为它是一个 bash 脚本。
【讨论】: