Sqlrutils(SQL Server 机器学习服务中的 R 包)

适用于:SQL Server 2016 (13.x) 及更高版本

Sqlrutils 是 Microsoft 的一种 R 包,为 R 用户提供一种机制,将他们的 R 脚本置于 T-SQL 存储过程中、向数据库注册该存储过程并从 R 开发环境运行存储过程。 该包在 SQL Server 机器学习服务SQL Server 2016 R Services 中提供。

通过转换 R 代码以在单个存储过程中运行,可更有效地利用 SQL Server R Services,它要求将 R 脚本作为参数嵌入 sp_execute_external_scriptsqlrutils 包有助于构建此嵌入的 R 脚本并正确设置相关参数。

Sqlrutils 包执行以下任务:

  • 将生成的 T-SQL 脚本保存为 R 数据结构内的字符串
  • 可以选择为 T-SQL 脚本生成 .sql 文件,可编辑或运行此文件来创建存储过程
  • 从 R 开发环境向 SQL Server 实例注册新创建的存储过程

也可通过传递格式正确的参数并处理结果,从 R 环境执行存储过程。 或者可使用 SQL Server 中的存储过程来支持常见数据库集成方案,例如 ETL、模型定型和大批量评分。

注意

若打算通过调用 executeStoredProcedure 函数从 R 环境运行存储过程,必须使用 ODBC 3.8 提供程序,例如适用于 SQL Server 的 ODBC Driver 13。

完整参考文档

Sqlrutils 包分布于多种 Microsoft 产品中,但不管你是在 SQL Server 还是在其他产品中获取该包,用法都是一样的。 如果存在任何特定于产品的行为,这些差异将在函数帮助页中注明。

函数列表

下一节概述可从 sqlrutils 包中调用以开发包含嵌入式 R 代码的存储过程的函数。 有关每个方法或函数的参数的详细信息,请参阅包的 R 帮助:help(package="sqlrutils")

函数 描述
executeStoredProcedure 执行 SQL 存储过程。
getInputParameters 获取存储过程的输入参数列表。
InputData 在 SQL Server 中定义将用于 R 数据帧的数据源。 指定 data.frame(在其中存储输入数据)的名称和获取数据的查询或默认值。 仅支持简单的 SELECT 查询。
InputParameter 定义将嵌入 T-SQL 脚本的单个输入参数。 必须提供参数名称及其 R 数据类型。
OutputData 如果 R 函数返回包含 data.frame 的列表,则会生成所需的中间数据对象。 OutputData 对象用于存储从列表获取的单个 data.frame 的名称。
OutputParameter 如果 R 函数返回列表,则会生成所需的中间数据对象。 OutputParameter 对象存储列表中单个成员的名称和数据类型,假定此成员 不是 数据帧。
registerStoredProcedure 将存储过程注册到数据库中。
setInputDataQuery 将查询分配给存储过程的输入数据参数。
setInputParameterValue 将值分配给存储过程的输入参数。
StoredProcedure 存储过程对象。

如何使用 sqlrutils

sqlrutils 包函数必须在具有 R 的 SQL Server 机器学习的计算机上运行。如果正在使用客户端工作站,请设置远程计算上下文以将执行转移到 SQL Server。 使用此包的工作流包括以下步骤:

  • 定义存储过程参数(输入、输出或两者)
  • 生成并注册存储过程
  • 执行该存储过程

在 R 会话中,通过键入 library(sqlrutils),从命令行加载 sqlrutils。

备注

如果将计算上下文更改为 SQL Server 并在该计算上下文中执行代码,则可以在不具有 SQL Server 的计算机上(例如,在 R 客户端实例上)加载此包。

定义存储过程参数和输入

StoredProcedure 是用于构建存储过程的主构造函数。 此构造函数生成 SQL Server 存储过程 对象,并选择性地创建包含查询的文本文件,其中此查询可使用 T-SQL 命令生成存储过程。

或者, StoredProcedure 函数也可向指定的实例和数据库注册存储过程。

  • 使用 func 参数指定有效的 R 函数。 该函数使用的所有变量必须在函数中定义或作为输入参数提供。 这些参数最多可包含一个数据帧。

  • R 函数必须返回数据帧、已命名列表或 NULL。 如果该函数返回列表,则列表最多可以包含一个 data.frame。

  • 使用参数 spName 指定要创建的存储过程的名称。

  • 可通过使用以下帮助器函数创建的对象,在可选输入和输出参数中传递: setInputDatasetInputParametersetOutputParameter

  • 可选择使用 filePath 提供要创建的 .sql 文件的路径和名称。 可在 SQL Server 实例上运行此文件,使用 T-SQL 生成存储过程。

  • 若要定义将保存存储过程的服务器和数据库,可使用参数 dbNameconnectionString

  • 若要获取用于创建特定 StoredProcedure 对象的 InputDataInputParameter 对象的列表,可调用 getInputParameters

  • 若要向指定数据库注册存储过程,可使用 registerStoredProcedure

存储过程对象通常没有任何关联数据或值,除非指定了默认值。 执行存储过程之前,不会检索数据。

指定输入并执行

  • 使用 setInputDataQuery 将查询分配到 InputParameter 对象。 例如,如果已在 R 中创建存储过程对象,可使用 setInputDataQuery 将参数传递到 StoredProcedure ,以使用所需输入执行存储过程。

  • 使用 setInputValue 将特定值分配到存储为 InputParameter 对象的参数。 然后将参数对象及其值分配传递到 StoredProcedure ,以使用设定值执行存储过程。

  • 使用 executeStoredProcedure 执行定义为 StoredProcedure 对象的存储过程。 仅当从 R 代码执行存储过程时,调用此函数。 使用 T-SQL 从 SQL Server 运行存储过程时,请勿使用它。

备注

executeStoredProcedure 函数需要 ODBC 3.8 提供程序,例如适用于 SQL Server 的 ODBC Driver 13。

另请参阅

如何使用 sqlrutils 创建存储过程