SQL Server R 包同步
适用于: 仅限 SQL Server 2017 (14.x)
SQL Server 2017 附带的 RevoScaleR 版本包含在文件系统与使用包的实例和数据库之间同步 R 包集合的功能。
提供此功能是为了更轻松地备份与 SQL Server 数据库相关联的 R 包集合。 使用此功能,管理员不仅可以还原数据库,还可以还原在该数据库中工作的由数据科学家使用的任何 R 包。
本文介绍包同步功能,以及如何使用 rxSyncPackages 函数执行以下任务:
同步整个 SQL Server 数据库的包列表
同步单个用户或一组用户使用的包
如果用户移动到不同的 SQL Server,则可以对用户的工作数据库执行备份并将其还原到新服务器,并且用户的包将按照 R 要求安装到新服务器上的文件系统中。
例如,可以在以下场景中使用包同步:
DBA 已将 SQL Server 的实例还原到新计算机,要求用户从其 R 客户端进行连接,并运行
rxSyncPackages
来刷新和还原包。你认为文件系统上的 R 包已损坏,因此在 SQL Server 上运行
rxSyncPackages
。
要求
要使用包同步,必须具有适当的 Microsoft R 版本。此功能在 Microsoft R 版本 9.1.0 或更高版本中提供。
还必须在服务器上启用包管理功能。
确定服务器是否支持包管理
SQL Server 2017 CTP 2 或更高版本中提供此功能。
启用包管理功能
若要使用包同步,需要在 SQL Server 实例和单个数据库上启用新的包管理功能。 有关详细信息,请参阅启用或禁用 SQL Server 包管理。
- 服务器管理员启用 SQL Server 实例的功能。
- 对于每个数据库,管理员会授予各个用户使用数据库角色安装或共享 R 包的能力。
完成此操作后,可以使用 RevoScaleR 函数(如 rxInstallPackages)将包安装到数据库中。 有关用户和可使用的包的信息存储在 SQL Server 实例中。
每当使用包管理功能添加新包时,SQL Server 和文件系统中的记录都将更新。 此信息可用于还原整个数据库的包信息。
权限
执行包同步功能的人员必须是包含包的 SQL Server 实例和数据库上的安全主体。
函数的调用方必须是下列包管理角色之一的成员:rpkgs-shared 或 rpkgs-private。
若要同步标记为“共享”的包,运行函数的人员必须具有 rpkgs-shared-shared 角色的成员身份,并且要移动的包必须已安装到共享范围库。
若要同步标记为“私有”的包,包的所有者或管理员必须运行该函数,并且包必须是私有的。
若要代表其他用户同步包,所有者必须是 db_owner 数据库角色的成员。
包同步的工作原理
若要使用包同步,请调用 rxSyncPackages,它是 RevoScaleR 中的新函数。
对于 rxSyncPackages
的每个调用,必须指定一个 SQL Server 实例和数据库。 然后,列出要同步的包或指定包范围。
使用
RxInSqlServer
函数创建 SQL Server 计算上下文。 如果未指定计算上下文,则使用当前的计算上下文。在指定的计算上下文中为实例提供数据库名称。 根据数据库来同步包。
使用范围参数指定要同步的包。
如果使用“私有”范围,则只同步指定所有者所拥有的包。 如果指定“共享”范围,将同步数据库中的所有非私有包。
如果在未指定“私有”或“共享”范围的情况下运行函数,将同步所有包。
如果此命令成功,则会将文件系统中的现有包添加到数据库,并具有指定的范围和所有者。
如果文件系统损坏,则会根据数据库中保留的列表还原包。
如果包管理功能在目标数据库上不可用,则会引发错误:“包管理功能在 SQL Server 上未启用或版本太旧”
示例 1。 根据数据库同步所有包
此示例从本地文件系统获取任何新包,并将包安装到数据库 [TestDB] 中。 由于没有特定所有者,因此该列表包含所有为私有和共享范围安装的包。
connectionString <- "Driver=SQL Server;Server=myServer;Database=TestDB;Trusted_Connection=True;"
computeContext <- RxInSqlServer(connectionString = connectionString )
rxSyncPackages(computeContext=computeContext, verbose=TRUE)
示例 2。 根据范围限制同步包
下面的示例只同步指定范围内的包。
#Shared scope
rxSyncPackages(computeContext=computeContext, scope="shared", verbose=TRUE)
#Private scope
rxSyncPackages(computeContext=computeContext, scope="private", verbose=TRUE)
示例 3。 根据所有者限制同步包
下面的示例演示如何仅同步为特定用户安装的包。 在此示例中,用户由 SQL 登录名 user1 标识。
rxSyncPackages(computeContext=computeContext, scope="private", owner = "user1", verbose=TRUE))