适用于:SQL Server 2016 (13.x) 及更高版本
了解如何使用 RevoScaleR 包将已序列化的 R 对象存储在表中,然后根据需要使用 SQL Server 机器学习服务从表中加载对象。 可在训练和保存模型时使用,然后在以后的评分或分析中使用。
RevoScaleR 包
RevoScaleR 包包含序列化和反序列化函数,这些函数可将 R 对象简洁地加载到 SQL Server,然后从表中读取对象。 通常,每个函数调用都使用简单的键值存储,其中,键是对象的名称,与键关联的值是将移入或移出表的 varbinary R 对象。
若要直接从 R 环境中将 R 对象保存到 SQL Server,必须执行以下操作:
- 使用 RxOdbcData 数据源建立与 SQL Server 的连接。
- 通过 ODBC 连接调用新函数
- 或者,可以指定不对对象进行序列化。 然后,选择要使用的新压缩算法,而不是默认的压缩算法。
默认情况下,从 R 调用以移动到 SQL Server 的任何对象都将进行序列化和压缩。 相反,从 SQL Server 表加载某对象以便在 R 代码中使用时,该对象将进行反序列化和解压。
新函数列表
rxWriteObject
使用 ODBC 数据源将 R 对象写入 SQL Server。rxReadObject
使用 ODBC 数据源从 SQL Server 数据库读取 R 对象rxDeleteObject
从 ODBC 数据源中指定的 SQL Server 数据库中删除 R 对象。 如果存在多个由键/版本组合标识的对象,则将删除所有对象。rxListKeys
以键/值对的方式列出所有可用对象。 这有助于确定 R 对象的名称和版本。
有关每个函数语法的详细帮助,请使用 R 帮助。 ScaleR 引用中还提供了详细信息。
如何使用 ODBC 在 SQL Server 中存储 R 对象
此过程说明如何使用新函数创建模型并将其保存到 SQL Server。
为 SQL Server 设置连接字符串。
conStr <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
使用连接字符串在 R 中创建 rxOdbcData 数据源对象。
ds <- RxOdbcData(table="robjects", connectionString=conStr)
如果已存在表,请将其删除,无需跟踪旧版本的对象。
if(rxSqlServerTableExists(ds@table, ds@connectionString)) { rxSqlServerDropTable(ds@table, ds@connectionString) }
定义可用于存储二进制对象的表。
ddl <- paste(" CREATE TABLE [", ds@table, "] ("," [id] varchar(200) NOT NULL, "," [value] varbinary(max), "," CONSTRAINT unique_id UNIQUE (id))", sep = "")
打开 ODBC 连接以创建表,DDL 语句完成之后,关闭连接。
rxOpen(ds, "w") rxExecuteSQLDDL(ds, ddl) rxClose(ds)
生成要存储的 R 对象。
infertLogit <- rxLogit(case ~ age + parity + education + spontaneous + induced, data = infert)
使用之前创建的 RxOdbcData 对象,将模型保存到数据库。
rxWriteObject(ds, "logit.model", infertLogit)
如何使用 ODBC 从 SQL Server 读取 R 对象
此过程说明如何使用新函数从 SQL Server 中加载模型。
为 SQL Server 设置连接字符串。
conStr2 <- 'Driver={SQL Server};Server=localhost;Database=storedb;Trusted_Connection=true'
使用连接字符串在 R 中创建 rxOdbcData 数据源对象。
ds <- RxOdbcData(table="robjects", connectionString=conStr2)
通过指定模型的 R 对象名称,从表中读取模型。
infertLogit2 <- rxReadObject(ds, "logit.model")