使用 sqlmlutils 安装 R 包

适用于: SQL Server 2019 (15.x) Azure SQL 托管实例

本文介绍如何使用 sqlmlutils 包中的函数将 R 包安装到 SQL Server 上的机器学习服务的实例以及大数据群集上。 安装的包可用于使用 sp_execute_external_script T-SQL 语句在数据库中运行的 R 脚本。

注意

本文中所述的 sqlmlutils 包用于将 R 包添加到 SQL Server 2019 或更高版本。 对于 SQL Server 2017 及更早版本,请参阅使用 R 工具安装包

本文介绍如果使用 sqlmlutils 包中的函数将 R 包安装到 Azure SQL 托管实例机器学习服务的实例上。 安装的包可用于使用 sp_execute_external_script T-SQL 语句在数据库中运行的 R 脚本。

注意

无法更新或卸载已在 SQL 托管实例机器学习服务的实例上预安装的包。 若要查看当前已安装的包的列表,请参阅列出所有已安装的 R 包

先决条件

  • 在用于连接到 SQL Server 的客户端计算机上安装 RRStudio Desktop。 可以使用任何 R IDE 来运行脚本,但本文假定使用 RStudio。

    客户端计算机上的 R 版本必须与服务器上的 R 版本匹配,并且安装的包必须与你拥有的 R 版本一致。 若要了解每个 SQL Server 版本包含哪个 R 版本,请参阅 Python 和 R 版本

    若要验证特定 SQL Server 上的 R 版本,请使用以下 T-SQL 命令。

    EXECUTE sp_execute_external_script @language = N'R'
    , @script = N'print(R.version)'
    
  • 在用于连接到 SQL Server 的客户端计算机上安装 Azure Data Studio。 你可以使用其他数据库管理或查询工具,但本文采用 Azure Data Studio。

其他注意事项

  • 包安装特定于在向 sqlmlutil 提供的连接信息中指定的 SQL 实例、数据库和用户。 若要在多个 SQL 实例或数据库中使用此包,或供不同的用户使用,则需要分别为它们安装此包。 在以下情况下例外:dbo 的成员安装了此包,此包是公共的,并且是与所有用户共享的。 如果用户安装了较新版本的公共包,则不会影响此公共包,但该用户将有权访问较新的版本。

  • 在 SQL Server 中运行的 R 脚本只能使用在默认实例库中安装的包。 SQL Server 无法从外部库加载包,即使该库位于同一台计算机上也是如此。 这包括与其他 Microsoft 产品一起安装的 R 库。

  • 在强化的 SQL Server 环境中,可能希望避免使用以下包:

    • 需要网络访问权限的包
    • 需要提升的文件系统访问权限的包
    • 用于 Web 开发或不受益于在 SQL Server 内部运行的其他任务的包

在客户端计算机上安装 sqlmlutils

若要使用 sqlmlutils,首先需要将其安装在用于连接到 SQL Server 的客户端计算机上。

sqlmlutils 包依赖于 odbc 包,odbc 依赖于许多其他包 。 请参照以下过程,按正确顺序安装所有这些包。

联机安装 sqlmlutils

如果客户端计算机可以访问 Internet,则可以联机下载并安装 sqlmlutils 及其依赖的包。

  1. https://github.com/microsoft/sqlmlutils/releases 将最新的 sqlmlutils 文件(对于 Windows 为 .zip ,对于 Linux 为 .tar.gz )下载到客户端计算机。 不要展开该文件。

  2. 打开“命令提示符”并运行以下命令,以安装 odbc 和 sqlmlutils 包 。 替换下载的 sqlmlutils 文件的路径。 已联机查找到 odbc 包,并进行了安装。

    R.exe -e "install.packages('odbc', type='binary')"
    R.exe CMD INSTALL sqlmlutils_1.0.0.zip
    
    R.exe -e "install.packages('odbc')"
    R.exe CMD INSTALL sqlmlutils_1.0.0.tar.gz
    

脱机安装 sqlmlutils

如果客户端计算机没有 Internet 连接,则需要使用能够访问 Internet 的计算机预先下载 odbc 和 sqlmlutils 包 。 然后,可以将这些文件复制到客户端计算机上的一个文件夹中,并脱机安装这些包。

odbc 包具备许多存在依赖关系的包,并且识别包的所有依赖关系很复杂。 建议使用 miniCRAN 来为包含所有依赖包的包创建本地存储库文件夹。 有关详细信息,请参阅使用 miniCRAN 创建本地 R 包存储库

sqlmlutils 包中包含一个文件,可以将该文件复制到客户端计算机并进行安装。

在能够访问 Internet 的计算机上执行以下操作:

  1. 安装 miniCRAN。 有关详细信息,请参阅安装 miniCRAN

  2. 在 RStudio 中,运行以下 R 脚本,创建 odbc 包的本地存储库。 本示例假定在文件夹 odbc 中创建存储库。

    library("miniCRAN")
    CRAN_mirror <- c(CRAN = "https://cran.microsoft.com")
    local_repo <- "odbc"
    pkgs_needed <- "odbc"
    pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);
    
    makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "win.binary", Rversion = "3.5");
    
    library("miniCRAN")
    CRAN_mirror <- c(CRAN = "https://cran.microsoft.com")
    local_repo <- "odbc"
    pkgs_needed <- "odbc"
    pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);
    
    makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "source", Rversion = "3.5");
    

    至于 Rversion 值,请使用安装在 SQL Server 上的 R 版本。 若要验证已安装的版本,请使用以下 T-SQL 命令。

    EXECUTE sp_execute_external_script @language = N'R'
     , @script = N'print(R.version)'
    
  3. https://github.com/microsoft/sqlmlutils/releases 下载最新的 sqlmlutils 文件(对于 Windows 为 .zip ,对于 Linux 为 .tar.gz )。 不要展开该文件。

  4. 将整个 odbc 存储库文件夹和 sqlmlutils 文件复制到客户端计算机 。

在用于连接到 SQL Server 的客户端计算机上:

  1. 打开命令提示符。

  2. 运行以下命令,依次安装 odbc 和 sqlmlutils 。 替换 odbc 存储库文件夹和复制到此计算机的 sqlmlutils 文件的完整路径 。

    R.exe -e "install.packages('odbc', repos='odbc')"
    R.exe CMD INSTALL sqlmlutils_1.0.0.zip
    
    R.exe -e "install.packages('odbc', repos='odbc')"
    R.exe CMD INSTALL sqlmlutils_1.0.0.tar.gz
    

在 SQL Server 上添加 R 包

在下面的示例中,将 glue 包添加到 SQL Server。

联机添加包

如果用于连接到 SQL Server 的客户端计算机具有 Internet 访问权限,则可以使用 sqlmlutils 在 Internet 上查找 glue 包及任何依赖项,然后将该包远程安装到 SQL Server 实例 。

  1. 在客户端计算机上,打开 RStudio 并创建一个新 R 脚本文件。

  2. 通过 sqlmlutils 使用以下 R 脚本安装 glue 包 。 请将相应部分替换为自己的 SQL Server 数据库连接信息。

    library(sqlmlutils)
    connection <- connectionInfo(
      server   = "server",
      database = "database",
      uid      = "username",
      pwd      = "password")
    
    sql_install.packages(connectionString = connection, pkgs = "glue", verbose = TRUE, scope = "PUBLIC")
    

    提示

    范围可为 PUBLIC(公共)或 PRIVATE(私有) 。 当数据库管理员需要安装所有用户都能使用的包时,公共范围就非常有用。 若采用私有范围,则只有安装这个包的用户才能使用它。 如果未指定范围,则默认范围为 PRIVATE(私有)。

脱机添加包

如果客户端计算机没有 Internet 连接,则需要通过能够访问 Internet 的计算机使用 miniCRAN 下载 glue 包 。 然后将包复制到客户端计算机,可以在其中脱机安装该包。 有关安装 miniCRAN 的信息,请参阅安装 miniCRAN

在能够访问 Internet 的计算机上执行以下操作:

  1. 运行以下 R 脚本,为 glue 创建本地存储库。 此示例在 c:\downloads\glue 中创建存储库文件夹。

    library("miniCRAN")
    CRAN_mirror <- c(CRAN = "https://cran.microsoft.com")
    local_repo <- "c:/downloads/glue"
    pkgs_needed <- "glue"
    pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);
    
    makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "win.binary", Rversion = "3.5");
    
    library("miniCRAN")
    CRAN_mirror <- c(CRAN = "https://cran.microsoft.com")
    local_repo <- "c:/downloads/glue"
    pkgs_needed <- "glue"
    pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);
    
    makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "source", Rversion = "3.5");
    

    至于 Rversion 值,请使用安装在 SQL Server 上的 R 版本。 若要验证已安装的版本,请使用以下 T-SQL 命令。

    EXECUTE sp_execute_external_script @language = N'R'
     , @script = N'print(R.version)'
    
  2. 将整个 glue 存储库文件夹 (c:\downloads\glue) 复制到客户端计算机。 例如,将它复制到 c:\temp\packages\glue 文件夹。

在客户端计算机上执行以下操作:

  1. 打开 RStudio 并创建一个新 R Script 文件。

  2. 通过 sqlmlutils 使用以下 R 脚本安装 glue 包 。 将自己的 SQL Server 数据库连接信息替换进去(如果不使用 Windows 身份验证,请添加 uidpwd 参数)。

    library(sqlmlutils)
    connection <- connectionInfo(
      server= "yourserver",
      database = "yourdatabase")
    localRepo = "c:/temp/packages/glue"
    
    sql_install.packages(connectionString = connection, pkgs = "glue", verbose = TRUE, scope = "PUBLIC", repos=paste0("file:///",localRepo))
    

    提示

    范围可为 PUBLIC(公共)或 PRIVATE(私有) 。 当数据库管理员需要安装所有用户都能使用的包时,公共范围就非常有用。 若采用私有范围,则只有安装这个包的用户才能使用它。 如果未指定范围,则默认范围为 PRIVATE(私有)。

使用包

安装 glue 包后,可以通过 T-SQL sp_execute_external_script 命令在 SQL Server 中的 R 脚本中使用它 。

  1. 打开 Azure Data Studio 并连接到 SQL Server 数据库。

  2. 运行以下命令:

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N'
    library(glue)
    
    name <- "Fred"
    birthday <- as.Date("2020-06-14")
    text <- glue(''My name is {name} '',
    ''and my birthday is {format(birthday, "%A, %B %d, %Y")}.'')
    
    print(text)
          ';
    

    结果

    My name is Fred and my birthday is Sunday, June 14, 2020.
    

删除包

如果要删除 glue 包,请运行以下 R 脚本。 使用与之前的定义一致的 connection 变量。

sql_remove.packages(connectionString = connection, pkgs = "glue", scope = "PUBLIC")

更多 sqlmlutils 函数

Sqlmlutils 包包含许多用于管理 R 包以及用于在 SQL Server 中创建、管理和运行存储过程和查询的函数。 有关详细信息,请参阅 sqlmlutils R README 文件

有关任何 sqlmlutils 函数的信息,请使用 R 帮助函数或“?”运算符。 例如:

library(sqlmlutils)
help("sql_install.packages")

后续步骤