定义并使用计算上下文(SQL Server 和 RevoScaleR 教程)
适用于:SQL Server 2016 (13.x) 及更高版本
这是介绍如何在 SQL Server 中使用 RevoScaleR 函数的 RevoScaleR 教程系列的第 4 个教程。
在上一教程中,已使用 RevoScaleR 函数检查数据对象。 本教程介绍了 RxInSqlServer 函数,它可用于为远程 SQL Server 定义计算上下文。 借助远程计算上下文,可以将 R 执行任务从本地会话转移到服务器上的远程会话。
- 了解远程 SQL Server 计算上下文的各个元素
- 对计算上下文对象启用跟踪
RevoScaleR 支持多种计算上下文:Hadoop、Spark on HDFS 以及 SQL Server 数据库内。 对于 SQL Server,RxInSqlServer 函数用于服务器连接,以及在本地计算机和远程执行上下文之间传递对象。
创建并设置计算上下文
用于创建 SQL Server 计算上下文的 RxInSqlServer 函数使用以下信息:
- SQL Server 实例的连接字符串
- 输出处理方式的规范
- 共享数据目录的可选规范
- 用于启用跟踪或指定跟踪级别的可选参数
本部分将指导你完成每个部分。
为执行计算的实例指定连接字符串。 可以重新使用之前创建的连接字符串。
使用 SQL 登录名
sqlConnString <- "Driver=SQL Server;Server=<SQL Server instance name>; Database=<database name>;Uid=<SQL user nme>;Pwd=<password>"
使用 Windows 身份验证
sqlConnString <- "Driver=SQL Server;Server=instance_name;Database=RevoDeepDive;Trusted_Connection=True"
指定所需的输出处理方式。 以下脚本指示本地 R 会话在处理下一个操作之前,先等待服务器上的 R 作业结果。 它还禁止在本地会话中显示远程计算的输出。
sqlWait <- TRUE sqlConsoleOutput <- FALSE
到 RxInSqlServer 的 wait 参数支持以下选项:
TRUE。 作业被配置为具有阻塞性且不会返回,直到它完成或失败。
FALSE。 作业被配置为具有非阻塞性且会立即返回,你可以继续运行其他 R 代码。 但是,即使在非阻塞模式下,作业运行时,也必须维持客户端与 SQL Server 的连接。
或者,指定本地 R 会话与远程 SQL Server 计算机及其帐户共用的本地目录的位置。
sqlShareDir <- paste("c:\\AllShare\\", Sys.getenv("USERNAME"), sep="")
如果要手动创建用于共享的特定目录,可以添加如下所示的代码行:
dir.create(sqlShareDir, recursive = TRUE)
向 RxInSqlServer 构造函数传递参数,以创建计算上下文对象。
sqlCompute <- RxInSqlServer( connectionString = sqlConnString, wait = sqlWait, consoleOutput = sqlConsoleOutput)
RxInSqlServer 的语法与之前用来定义数据源的 RxSqlServerData 函数的语法看上去差不多。 但是,它们之间存在以下重要差异。
使用函数 RxSqlServerData 定义的数据源对象指定数据的存储位置。
与之相反,使用函数 RxInSqlServer 定义的计算上下文指示聚合和其他计算发生的位置。
定义计算上下文不会影响任何其他可能在工作站上执行的泛型 R 计算,也不会更改数据源。 例如,你可以将本地文本文件定义为数据源,但会将计算上下文更改为 SQL Server 并对 SQL Server 计算机上的数据执行所有的读取和汇总操作。
激活远程计算上下文。
rxSetComputeContext(sqlCompute)
返回有关计算上下文的信息,包括其属性。
rxGetComputeContext()
通过指定“local”关键字,将计算上下文重置回本地计算机(下一教程展示了如何使用远程计算上下文)。
rxSetComputeContext("local")
提示
有关此函数支持的其他关键字的列表,请从 R 命令行键入 help("rxSetComputeContext")
。
启用跟踪
有时操作在本地上下文中正常工作,但在远程计算上下文中运行时会有问题。 如果想要分析问题或监视性能,则可以在计算上下文中启用跟踪,以支持运行时故障排除。
创建使用相同连接字符串的新计算上下文,但将参数 traceEnabled 和 traceLevel 添加到 RxInSqlServer 构造函数中。
sqlComputeTrace <- RxInSqlServer( connectionString = sqlConnString, #shareDir = sqlShareDir, wait = sqlWait, consoleOutput = sqlConsoleOutput, traceEnabled = TRUE, traceLevel = 7)
在此示例中,将 traceLevel 属性设置为 7,这意味着“显示所有跟踪信息”。
使用 rxSetComputeContext 函数按名称指定启用了跟踪的计算上下文。
rxSetComputeContext(sqlComputeTrace)
后续步骤
了解如何切换计算上下文以在服务器上或在本地运行 R 代码。