安裝 SQL Server 適用的 R 自訂執行階段

適用於:SQL Server 2019 (15.x)

了解如何安裝 R 自訂執行階段,以在下列位置使用 SQL Server 執行外部 R 指令碼:

  • Windows
  • Ubuntu Linux
  • Red Hat Enterprise Linux (RHEL)
  • SUSE Linux Enterprise Server (SLES) 版本 12

自訂執行階段可以執行機器學習指令碼,並使用 SQL Server 語言延伸模組

搭配 SQL Server 使用您自己的 R 執行階段版本,而不是隨 SQL Server Machine Learning 服務一起安裝的預設執行階段版本。

從 SQL Server 2022 (16.x) 開始,R、Python 和 JAVA 的執行階段將不再隨 SQL 安裝程式一起安裝。 相反地,安裝所需的 R 自訂執行階段和套件。 如需詳細資訊,請參閱在 Windows 上安裝 SQL Server 2022 機器學習服務 (Python 和 R)在 Linux 上安裝 SQL Server 機器學習服務 (Python 和 R)

必要條件

安裝 R 自訂執行階段之前,請先安裝下列項目:

安裝語言擴充功能

注意

如果您已在 SQL Server 2019 上安裝機器學習服務,便已經安裝語言延伸模組,而且您可以跳過此步驟。

請遵循下列步驟來安裝用於 R 自訂執行階段的 SQL Server 語言延伸模組

  1. 啟動 SQL Server 2019 的安裝精靈。

  2. 在 [安裝] 索引標籤上,選取 [新增 SQL Server 獨立安裝或將功能加入至現有安裝] 。

  3. 在 [特徵選取] 頁面上,選取下列選項:

    • Database Engine 服務

      若要搭配 SQL Server 使用語言延伸模組,您必須安裝資料庫引擎的執行個體。 您可以使用新的或現有的執行個體。

    • 機器學習服務和語言延伸模組

      選取 [機器學習服務和語言延伸模組]。 請勿選取 R,因為您稍後將會安裝自訂 R 執行階段。

      SQL Server 2019 Language Extensions setup.

  4. 在 [準備安裝] 頁面上,確認包含這些選項,然後選取 [安裝] 。

    • Database Engine 服務
    • 機器學習服務和語言延伸模組
  5. 安裝完成之後,如果系統要求,請重新啟動電腦。

重要

如果您安裝具有語言延伸模組的新 SQL Server 2019 執行個體,請先安裝累積更新 (CU) 3 或更新版本,再繼續進行下一個步驟。

安裝 R

下載並安裝您將用來作為自訂執行階段的 R 版本。 支援 R 3.3 版或更新版本。

  1. 下載 R 3.3 版或更新版本

  2. 執行 R 安裝程式。

  3. 記下 R 安裝所在的路徑。 例如,在本文中是 C:\Program Files\R\R-4.0.3

    R setup

更新系統環境變數

請遵循下列步驟來修改 PATH 系統環境變數。

  1. 在 Windows 搜尋方塊中,搜尋 [編輯系統環境變數],然後加以開啟。

  2. 在 [進階] 底下,選取 [環境變數]。

  3. 修改 PATH 系統環境變數。

    選取 [PATH],然後按一下 [編輯]。

    選取 [新增],並且在 R 安裝路徑中新增 \bin\x64 資料夾的路徑。 例如: C:\Program Files\R\R-4.0.3\bin\x64

安裝 Rcpp 套件

請遵循下列步驟來安裝 Rcpp 套件。

  1. 啟動提高權限的命令提示字元 (以系統管理員身分執行)。

  2. 從命令提示字元啟動 R。 在 R 安裝路徑的資料夾中執行 \bin\R.exe。 例如: C:\Program Files\R\R-4.0.3\bin\R.exe

    "C:\Program Files\R\R-4.0.3\bin\R.exe"
    
  3. 執行下列指令碼以在 R 安裝路徑的 \library 資料夾中安裝 Rcpp 套件。 例如: C:\Program Files\R\R-4.0.3\library

    install.packages("Rcpp", lib="C:\\Program Files\\R\\R-4.0.3\\library");
    

授與 R 資料夾的權限

注意

如果您已在 C:\Program Files\R\R-version 的預設位置 (例如,C:\Program Files\R\R-4.0.3) 安裝 R,可以略過此步驟。

從全新提升權限的命令提示字元執行 icacls 命令,將讀取並執行權限授與 SQL Server Launchpad 服務使用者名稱和 SID S-1-15-2-1 (所有應用程式封裝)。 Launchpad 服務使用者名稱採用的格式是 NT Service\MSSQLLAUNCHPAD$INSTANCENAME,其中 INSTANCENAME 是您 SQL Server 的執行個體名稱。

這些命令會以遞迴方式授與指定目錄路徑下的所有檔案與資料夾的存取權。

  1. SQL Server Launchpad 服務使用者名稱提供 R 安裝路徑的權限。 例如: C:\Program Files\R\R-4.0.3

    icacls "C:\Program Files\R\R-4.0.3" /grant "NT Service\MSSQLLAUNCHPAD":(OI)(CI)RX /T
    

    針對具名執行個體,名為 SQL01 之執行個體的命令將為 icacls "C:\Program Files\R\R-4.0.3" /grant "NT Service\MSSQLLAUNCHPAD$SQL01":(OI)(CI)RX /T

  2. SID S-1-15-2-1 提供 R 安裝路徑的權限。 例如: C:\Program Files\R\R-4.0.3

    icacls "C:\Program Files\R\R-4.0.3" /grant *S-1-15-2-1:(OI)(CI)RX /T
    

    前述命令會授與權限給電腦 SID S-1-15-2-1,這相當於英文版 Windows 上的所有應用程式套件。 或者,您也可以在英文版的 Windows 上使用 icacls "C:\Program Files\R\R-4.0.3" /grant "ALL APPLICATION PACKAGES":(OI)(CI)RX /T

重新啟動 SQL Server Launchpad

依照下列步驟重新啟動 SQL Server Launchpad 服務。

  1. 開啟 SQL Server 組態管理員

  2. 在 [SQL Server 服務] 下,以滑鼠右鍵按一下 [SQL Server Launchpad (MSSQLSERVER)],然後選取 [重新啟動]。 如果您使用的是具名執行個體,將會顯示執行個體名稱,而不是 (MSSQLSERVER)

註冊語言延伸模組

遵循下列步驟來下載並註冊用於 R 自訂執行階段的 R 語言延伸模組。

  1. SQL Server 語言延伸模組 GitHub 存放庫下載 R-lang-extension-windows-release.zip 檔案。

    或者,您可以在開發或測試環境中使用偵錯版本 (R-lang-extension-windows-debug.zip)。 偵錯版本提供詳細的記錄資訊以方便調查任何錯誤,且不建議用於生產環境。

  2. 使用 Azure Data Studio 來連線到您的 SQL Server 執行個體,並執行下列 T-SQL 命令,使用建立外部語言註冊 R 語言延伸模組。

    修改此陳述式中的路徑,以反映所下載語言延伸模組 zip 檔案 (R-lang-extension-windows-release.zip) 的位置,和 R 安裝 (C:\\Program Files\\R\\R-4.0.3) 的位置。

    CREATE EXTERNAL LANGUAGE [myR]
    FROM (CONTENT = N'C:\path\to\R-lang-extension-windows-release.zip', 
        FILE_NAME = 'libRExtension.dll',
        ENVIRONMENT_VARIABLES = N'{"R_HOME": "C:\\Program Files\\R\\R-4.0.3"}');
    GO
    

    針對您要在其中使用 R 語言延伸模組的每個資料庫執行陳述式。

    注意

    R 是保留字,而且不能作為新外部語言名稱的名稱使用。 請改為使用不同的名稱。 例如,上述陳述式使用 myR

必要條件

安裝 R 自訂執行階段之前,請先安裝下列項目:

安裝語言擴充功能

注意

如果您已在 SQL Server 2019 上安裝了機器學習服務,便已經安裝適用於語言延伸模組的 mssql-server-extensibility 套件,而且可以跳過此步驟。

執行以下命令在 Ubuntu Linux 上安裝用於 R 自訂執行階段的 SQL Server 語言延伸模組

  1. 可能的話,請在安裝之前執行此命令以重新整理系統上的套件。

    # Install as root or sudo
    sudo apt-get update
    
  2. 使用此命令安裝 mssql-server-extensibility

    # Install as root or sudo
    sudo apt-get install mssql-server-extensibility
    

安裝 R

  1. 如果您已安裝機器學習服務,R 已經安裝在 /opt/microsoft/ropen/3.5.2/lib64/R 中。 如果您想要繼續使用此路徑作為 R_HOME,您可以略過此步驟。

    如果您想要使用不同的 R 執行階段,必須先移除 microsoft-r-open-mro,才能繼續安裝新的版本。

    sudo apt remove microsoft-r-open-mro-3.5.2
    
  2. 安裝適用於 Ubuntu 的 R (3.3 或更新版本)。 根據預設,R 會安裝在 /usr/lib/R 中。 此路徑是您的 R_HOME。 如果您將 R 安裝在其他位置,請記下該路徑作為您的 R_HOME

    以下是 Ubuntu 的範例指示。 請針對您的 R 版本變更以下的存放庫 URL。

    export DEBIAN_FRONTEND=noninteractive
    sudo apt-get update
    sudo apt-get --no-install-recommends -y install curl zip unzip apt-transport-https libstdc++6
    
    # Add R CRAN repository. This repository works for R 4.0.x.
    #
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
    sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu xenial-cran40/'
    sudo apt-get update
    
    # Install R runtime.
    #
    sudo apt-get -y install r-base-core
    

R 的自訂安裝

注意

如果您已在 /usr/lib/R 的預設位置安裝 R,您可以略過本節並且前往安裝 Rcpp 套件一節。

更新環境變數

首先,編輯 mssql-launchpadd 服務,將 R_HOME 環境變數新增至檔案 /etc/systemd/system/mssql-launchpadd.service.d/override.conf

  1. 使用 systemctl 開啟檔案

    sudo systemctl edit mssql-launchpadd
    
  2. 在開啟的 /etc/systemd/system/mssql-launchpadd.service.d/override.conf 檔案中插入下列文字。 將 R_HOME 的值設定為自訂 R 安裝路徑。

    [Service]
    Environment="R_HOME=<path to R>"
    
  3. 儲存並關閉。

接下來,請確定可以載入 libR.so

  1. /etc/ld.so.conf.d中建立 custom-r.conf 檔案。

    sudo vi /etc/ld.so.conf.d/custom-r.conf
    
  2. 在開啟的檔案中,從自訂 R 安裝版本新增 libR.so 的路徑。

    <path to the R lib>
    
  3. 儲存新檔案並關閉編輯器。

  4. 執行下列命令,並檢查是否找得到所有相依的程式庫,以執行 ldconfig 並確認可以載入 libR.so

    sudo ldconfig
    ldd <path to the R lib>/libR.so
    

授與自訂 R 安裝資料夾的存取權

/var/opt/mssql/mssql.conf 檔案的 [擴充性] 區段中,將 datadirectories 選項設定為自訂 R 安裝。

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to R>

重新啟動 mssql-launchpadd 服務

執行下列命令以重新啟動 mssql-launchpadd

sudo systemctl restart mssql-launchpadd

安裝 Rcpp 套件

請遵循下列步驟來安裝 Rcpp 套件。

  1. 從殼層啟動 R:

    sudo ${R_HOME}/bin/R
    
  2. 執行下列指令碼以在 ${R_HOME}\library 資料夾中安裝 Rcpp 套件。

install.packages("Rcpp", lib = "${R_HOME}/library");

註冊語言延伸模組

遵循下列步驟來下載並註冊用於 R 自訂執行階段的 R 語言延伸模組。

  1. SQL Server 語言延伸模組 GitHub 存放庫下載 R-lang-extension-linux-release.zip 檔案。

    或者,您可以在開發或測試環境中使用偵錯版本 (R-lang-extension-linux-debug.zip)。 偵錯版本提供詳細的記錄資訊以方便調查任何錯誤,且不建議用於生產環境。

  2. 使用 Azure Data Studio 來連線到您的 SQL Server 執行個體,並執行下列 T-SQL 命令,使用建立外部語言註冊 R 語言延伸模組。

    修改此陳述式中的路徑,以反映所下載語言延伸模組 zip 檔案 (R-lang-extension-linux-release.zip) 的位置。

    CREATE EXTERNAL LANGUAGE [myR]
    FROM (CONTENT = N'/path/to/R-lang-extension-linux-release.zip', FILE_NAME = 'libRExtension.so.1.1');
    GO
    

    針對您要在其中使用 R 語言延伸模組的每個資料庫執行陳述式。

    注意

    R 是保留字,而且不能作為新外部語言名稱的名稱使用。 請改為使用不同的名稱。 例如,上述陳述式使用 myR

必要條件

安裝 R 自訂執行階段之前,請先安裝下列項目:

  • RExtension 需要 GLIBCXX_3.4.20。 請確定 Red Hat Enterprise Linux (RHEL) 安裝上的 libstdc++.so.6 版本提供此項目。

安裝語言擴充功能

注意

如果您已在 SQL Server 2019 上安裝了機器學習服務,便已經安裝適用於語言延伸模組的 mssql-server-extensibility 套件,而且可以跳過此步驟。

執行下列命令,在 Red Hat Enterprise Linux (RHEL) 上安裝用於 R 自訂執行階段的 SQL Server 語言延伸模組

# Install as root or sudo
sudo yum install mssql-server-extensibility

安裝 R

  1. 如果您已安裝機器學習服務,R 已經安裝在 /opt/microsoft/ropen/3.5.2/lib64/R 中。 如果您想要繼續使用此路徑作為 R_HOME,您可以略過此步驟。

    如果您想要使用不同的 R 執行階段,必須先移除 microsoft-r-open-mro,才能繼續安裝新的版本。

    sudo yum erase microsoft-r-open-mro-3.5.2
    
  2. 安裝適用於 Red Hat Enterprise Linux (RHEL) 的 R (3.3 或更新版本)。 根據預設,R 會安裝在 /usr/lib64/R 中。 此路徑是您的 R_HOME。 如果您將 R 安裝在其他位置,請記下該路徑作為您的 R_HOME

    sudo yum install -y R
    

R 的自訂安裝

注意

如果您已在 /usr/lib/R 的預設位置安裝 R,您可以略過本節並且前往安裝 Rcpp 套件一節。

更新環境變數

首先,編輯 mssql-launchpadd 服務,將 R_HOME 環境變數新增至檔案 /etc/systemd/system/mssql-launchpadd.service.d/override.conf

  1. 使用 systemctl 開啟檔案

    sudo systemctl edit mssql-launchpadd
    
  2. 在開啟的 /etc/systemd/system/mssql-launchpadd.service.d/override.conf 檔案中插入下列文字。 將 R_HOME 的值設定為自訂 R 安裝路徑。

    [Service]
    Environment="R_HOME=<path to R>"
    
  3. 儲存並關閉。

接下來,請確定可以載入 libR.so

  1. /etc/ld.so.conf.d中建立 custom-r.conf 檔案。

    sudo vi /etc/ld.so.conf.d/custom-r.conf
    
  2. 在開啟的檔案中,從自訂 R 安裝版本新增 libR.so 的路徑。

    <path to the R lib>
    
  3. 儲存新檔案並關閉編輯器。

  4. 執行下列命令,並檢查是否找得到所有相依的程式庫,以執行 ldconfig 並確認可以載入 libR.so

    sudo ldconfig
    ldd <path to the R lib>/libR.so
    

授與自訂 R 安裝資料夾的存取權

/var/opt/mssql/mssql.conf 檔案的 [擴充性] 區段中,將 datadirectories 選項設定為自訂 R 安裝。

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to R>

重新啟動 mssql-launchpadd 服務

執行下列命令以重新啟動 mssql-launchpadd

sudo systemctl restart mssql-launchpadd

安裝 Rcpp 套件

請遵循下列步驟來安裝 Rcpp 套件。

  1. 從殼層啟動 R:

    sudo ${R_HOME}/bin/R
    
  2. 執行下列指令碼以在 ${R_HOME}\library 資料夾中安裝 Rcpp 套件。

install.packages("Rcpp", lib = "${R_HOME}/library");

註冊語言延伸模組

遵循下列步驟來下載並註冊用於 R 自訂執行階段的 R 語言延伸模組。

  1. SQL Server 語言延伸模組 GitHub 存放庫下載 R-lang-extension-linux-release.zip 檔案。

    或者,您可以在開發或測試環境中使用偵錯版本 (R-lang-extension-linux-debug.zip)。 偵錯版本提供詳細的記錄資訊以方便調查任何錯誤,且不建議用於生產環境。

  2. 使用 Azure Data Studio 來連線到您的 SQL Server 執行個體,並執行下列 T-SQL 命令,使用建立外部語言註冊 R 語言延伸模組。

    修改此陳述式中的路徑,以反映所下載語言延伸模組 zip 檔案 (R-lang-extension-linux-release.zip) 的位置。

    CREATE EXTERNAL LANGUAGE [myR]
    FROM (CONTENT = N'/path/to/R-lang-extension-linux-release.zip', FILE_NAME = 'libRExtension.so.1.1');
    GO
    

    針對您要在其中使用 R 語言延伸模組的每個資料庫執行陳述式。

    注意

    R 是保留字,而且不能作為新外部語言名稱的名稱使用。 請改為使用不同的名稱。 例如,上述陳述式使用 myR

必要條件

安裝 R 自訂執行階段之前,請先安裝下列項目:

安裝語言擴充功能

注意

如果您已在 SQL Server 2019 上安裝了機器學習服務,便已經安裝適用於語言延伸模組的 mssql-server-extensibility 套件,而且可以跳過此步驟。

執行下列命令,在 SUSE Linux Enterprise Server (SLES) 上安裝用於 R 自訂執行階段的 SQL Server 語言延伸模組

# Install as root or sudo
sudo zypper install mssql-server-extensibility

安裝 R

  1. 如果您已安裝機器學習服務,R 已經安裝在 /opt/microsoft/ropen/3.5.2/lib64/R 中。 如果您想要繼續使用此路徑作為 R_HOME,您可以略過此步驟。

    如果您想要使用不同的 R 執行階段,必須先移除 microsoft-r-open-mro,才能繼續安裝新的版本。

    sudo zypper remove microsoft-r-open-mro-3.4.4
    
  2. 安裝適用於 SUSE Linux Enterprise Server (SLES) 的 R (3.3 或更新版本)。 根據預設,R 會安裝在 /usr/lib64/R 中。 此路徑是您的 R_HOME。 如果您將 R 安裝在其他位置,請記下該路徑作為您的 R_HOME

    請依照下列步驟安裝 R:

    sudo zypper ar -f http://download.opensuse.org/repositories/devel:/languages:/R:/patched/openSUSE_12.3/ R-patched
    sudo zypper --gpg-auto-import-keys ref
    sudo zypper install R-core-libs R-core R-core-doc R-patched
    

    除非您需要此套件,否則您可以忽略 R-tcltk-3.6.1 的警告。

安裝 gcc-c++

在 SUSE Linux Enterprise Server (SLES) 上安裝 gcc-c++。 這會用於稍後安裝的 Rcpp

sudo zypper install gcc-c++

R 的自訂安裝

注意

如果您已在 /usr/lib/R 的預設位置安裝 R,您可以略過本節並且前往安裝 Rcpp 套件一節。

更新環境變數

首先,編輯 mssql-launchpadd 服務,將 R_HOME 環境變數新增至檔案 /etc/systemd/system/mssql-launchpadd.service.d/override.conf

  1. 使用 systemctl 開啟檔案

    sudo systemctl edit mssql-launchpadd
    
  2. 在開啟的 /etc/systemd/system/mssql-launchpadd.service.d/override.conf 檔案中插入下列文字。 將 R_HOME 的值設定為自訂 R 安裝路徑。

    [Service]
    Environment="R_HOME=<path to R>"
    
  3. 儲存並關閉。

接下來,請確定可以載入 libR.so

  1. /etc/ld.so.conf.d中建立 custom-r.conf 檔案。

    sudo vi /etc/ld.so.conf.d/custom-r.conf
    
  2. 在開啟的檔案中,從自訂 R 安裝版本新增 libR.so 的路徑。

    <path to the R lib>
    
  3. 儲存新檔案並關閉編輯器。

  4. 執行下列命令,並檢查是否找得到所有相依的程式庫,以執行 ldconfig 並確認可以載入 libR.so

    sudo ldconfig
    ldd <path to the R lib>/libR.so
    

授與自訂 R 安裝資料夾的存取權

/var/opt/mssql/mssql.conf 檔案的 [擴充性] 區段中,將 datadirectories 選項設定為自訂 R 安裝。

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to R>

重新啟動 mssql-launchpadd 服務

執行下列命令以重新啟動 mssql-launchpadd

sudo systemctl restart mssql-launchpadd

安裝 Rcpp 套件

請遵循下列步驟來安裝 Rcpp 套件。

  1. 從殼層啟動 R:

    sudo ${R_HOME}/bin/R
    
  2. 執行下列指令碼以在 ${R_HOME}\library 資料夾中安裝 Rcpp 套件。

install.packages("Rcpp", lib = "${R_HOME}/library");

註冊語言延伸模組

遵循下列步驟來下載並註冊用於 R 自訂執行階段的 R 語言延伸模組。

  1. SQL Server 語言延伸模組 GitHub 存放庫下載 R-lang-extension-linux-release.zip 檔案。

    或者,您可以在開發或測試環境中使用偵錯版本 (R-lang-extension-linux-debug.zip)。 偵錯版本提供詳細的記錄資訊以方便調查任何錯誤,且不建議用於生產環境。

  2. 使用 Azure Data Studio 來連線到您的 SQL Server 執行個體,並執行下列 T-SQL 命令,使用建立外部語言註冊 R 語言延伸模組。

    修改此陳述式中的路徑,以反映所下載語言延伸模組 zip 檔案 (R-lang-extension-linux-release.zip) 的位置。

    CREATE EXTERNAL LANGUAGE [myR]
    FROM (CONTENT = N'/path/to/R-lang-extension-linux-release.zip', FILE_NAME = 'libRExtension.so.1.1');
    GO
    

    針對您要在其中使用 R 語言延伸模組的每個資料庫執行陳述式。

    注意

    R 是保留字,而且不能作為新外部語言名稱的名稱使用。 請改為使用不同的名稱。 例如,上述陳述式使用 myR

啟用外部指令碼

您可以使用預存程序 sp_execute_external script 執行 R 外部指令碼。

若要啟用外部指令碼,請使用 Azure Data Studio 來執行下面的陳述式。

sp_configure 'external scripts enabled', 1;
RECONFIGURE WITH OVERRIDE;  

確認安裝

使用下列 SQL 指令碼來確認 R 自訂執行階段的安裝與功能。 在下列範例指令碼中,myR 是用來作為語言名稱,因為無法為自訂執行階段提供預設語言名稱 R

EXEC sp_execute_external_script
    @language =N'myR',
    @script=N'
print(R.home());
print(file.path(R.home("bin"), "R"));
print(R.version);
print("Hello RExtension!");'

已知問題

如果您在註冊語言延伸模組時,藉由將 R_HOME 設定為 C:\Program Files\Microsoft SQL Server\MSSQL15.<INSTANCE_NAME>\R_SERVICES,使用作為 SQL Server 機器學習服務一部分而提供的 R,您可能會在使用 sp_execute_external script 執行任何外部自訂 R 指令碼時,遇到下列錯誤。

錯誤:已耗盡記憶體 (達到限制?)

若要解決此問題:

  1. 設定環境變數 R_NSIZE,將固定大小物件的數量 (cons cells) 表示為合理的值,例如 200000
  2. 重新啟動 Launchpad 服務,然後重試指令碼的執行。

已知問題

如果 libstdc++.so.6 不是正確的版本,您會看到以下錯誤:

Exthost:載入延伸模組失敗 /lib64/libstdc++.so.6:找不到版本 `GLIBCXX_3.4.20' (/home/mssql_satellite/externallanguagessandboxpath/libRExtension.so.1.1 需要此版本)

下一步