SQL Server 用の Python カスタム ランタイムをインストールするInstall a Python custom runtime for SQL Server

適用対象:Applies to: はいSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x)適用対象:Applies to: はいSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x)

この記事では、SQL Server で Python スクリプトを実行するためのカスタム ランタイムをインストールする方法について説明します。This article describes how to install a custom runtime for running Python scripts with SQL Server. カスタム ランタイムによって、外部コードを実行するための機能拡張フレームワーク上に構築された言語拡張テクノロジが使用されます。The custom runtime uses language extension technology built on an extensibility framework for executing external code. Python 用のカスタム ランタイムは、次のシナリオで使用できます。The custom runtime for Python can be used in the following scenarios:

  • 機能拡張フレームワークを使用する SQL Server のインストール。An installation of SQL Server with extensibility framework.

  • SQL Server 2019 での Machine Learning Services のインストール。An installation of Machine Learning Services with SQL Server 2019. いくつかの追加構成手順を完了した後、言語拡張機能を SQL Server Machine Learning Services で使用できます。The language extension can be used with SQL Server Machine Learning Services after completing some additional configuration steps.

注意

この記事では、Windows に Python 用のカスタム ランタイムをインストールする方法について説明します。This article describes how to install a custom runtime for Python on Windows. Linux にインストールするには、SQL Server on Linux 用の Python カスタム ランタイムのインストールに関するページを参照してくださいTo install on Linux, see Install a Python custom runtime for SQL Server on Linux.

インストール前のチェックリストPre-install checklist

Python カスタム ランタイムをインストールする前に、次のものをインストールします。Before installing a Python custom runtime, install the following:

Windows 用の SQL Server 言語拡張機能を追加するAdd SQL Server Language Extensions for Windows

注意

SQL Server 2019 に Machine Learning Services がインストールされている場合、拡張機能フレームワークは既にインストールされているため、この手順をスキップできます。If you have Machine Learning Services installed on SQL Server 2019, the extensibility framework is already installed and you can skip this step.

言語拡張機能では、外部コードの実行に機能拡張フレームワークが使用されます。Language Extensions use the extensibility framework for executing external code. コードの実行はコア エンジン プロセスから分離されていますが、SQL Server のクエリ実行と完全に統合されています。Code execution is isolated from the core engine processes, but fully integrated with SQL Server query execution.

  1. SQL Server 2019 のセットアップ ウィザードを開始します。Start the setup wizard for SQL Server 2019.

  2. [インストール] タブで、 [SQL Server の新規スタンドアロン インストールを実行するか、既存のインストールに機能を追加します] を選択します。On the Installation tab, select New SQL Server stand-alone installation or add features to an existing installation.

    SQL Server 2019 インストール CU3 以降

  3. [機能の選択] ページで、次のオプションを選択します。On the Feature Selection page, select these options:

    • データベース エンジン サービスDatabase Engine Services

      SQL Server で言語拡張を使用するには、データベース エンジンのインスタンスをインストールする必要があります。To use Language Extensions with SQL Server, you must install an instance of the database engine. 既定のインスタンスまたは名前付きインスタンスを使用できます。You can use either a default or a named instance.

    • Machine Learning Services および言語の拡張Machine Learning Services and Language Extensions

      [Machine Learning Services および言語の拡張] を選択します。Select Machine Learning Services and Language Extensions. Python を選択する必要はありません。There's no need to select Python.

    SQL Server 2019 CU3 以降のインストール機能

  4. [インストールの準備完了] ページで、以下が選択されていることを確認した後、 [インストール] を選択します。On the Ready to Install page, verify that these selections are included, and select Install.

    • データベース エンジン サービスDatabase Engine Services
    • Machine Learning Services および言語の拡張Machine Learning Services and Language Extensions
  5. セットアップが完了し、コンピューターの再起動を求めるメッセージが表示されたら、再起動してください。After setup is complete, if you're instructed to restart the computer, do so now. セットアップが完了した時点で、インストール ウィザードによるメッセージを確認することが重要です。It's important to read the message from the Installation Wizard when you've finished with Setup. 詳細については、「 SQL Server セットアップ ログ ファイルの表示と読み取り」を参照してください。For more information, see View and Read SQL Server Setup Log Files.

Python 3.7 をインストールするInstall Python 3.7

Python 3.7 をインストールし、PATH に追加します。Install Python 3.7 and add it to the PATH.

Python 3.7 をパスに追加します。

pandas をインストールするInstall pandas

"管理者特権" でのコマンド プロンプトから、Python 用 pandas パッケージをインストールします。Install the pandas package for Python from an elevated command prompt:

python.exe -m pip install pandas

システム環境変数を更新するUpdate the system environment variables

システム環境変数として PYTHONHOME を追加または変更します。Add or modify PYTHONHOME as a system environment variable.

  • Windows の検索ボックスに「環境」と入力し、 [Edit the system environment variables](システム環境変数の編集) を選択します。In the Windows search box, type "environment" and select Edit the system environment variables.
  • [詳細設定] タブの [環境変数] を選択します。In the Advanced tab, select Environment Variables.
  • [システム変数][新規] を選択し、Python 3.7 のインストール場所を指す PYTHONHOME を作成します。Under System variables, select New to create PYTHONHOME to point to the Python 3.7 installation location. PYTHONHOME が既に存在する場合は、 [編集] を選択し、Python 3.7 のインストール場所を指定します。If PYTHONHOME already exists, select Edit to point it to the Python 3.7 installation location.
  • [OK] を選択して、残りのウィンドウを閉じます。Select OK to close remaining windows.

PYTHONHOME システム変数を作成します。

カスタム Python インストール フォルダーへのアクセスを許可するGrant access to the custom Python installation folder

新しい "管理者特権" でのコマンド プロンプトから次の icacls コマンドを実行して、PYTHONHOME に対する READ および EXECUTE のアクセス権を、SQL Server Launchpad サービス と SID S-1-15-2-1 (ALL_APPLICATION_PACKAGES) に付与します。Run the following icacls commands from a new elevated command prompt to grant READ & EXECUTE access to PYTHONHOME to SQL Server Launchpad Service and SID S-1-15-2-1 (ALL_APPLICATION_PACKAGES). Launchpad サービスのユーザー名は NT Service\MSSQLLAUNCHPAD$INSTANCENAME* where INSTANCENAME はご利用の SQL Server のインスタンス名です。The launchpad service username is: NT Service\MSSQLLAUNCHPAD$INSTANCENAME* where INSTANCENAME is the instance name of your SQL Server. そのコマンドでは、指定したディレクトリ パスの下にあるすべてのファイルとフォルダーへのアクセス権が再帰的に許可されます。The commands will recursively grant access to all files and folders under the given directory path.

インスタンス名を MSSQLLAUNCHPAD に追加します (MSSQLLAUNCHPAD$INSTANCENAME)。Append the instance name to MSSQLLAUNCHPAD (MSSQLLAUNCHPAD$INSTANCENAME). この例では、INSTANCENAME は既定のインスタンス MSSQLSERVER です。In this example, INSTANCENAME is the default instance MSSQLSERVER.

  1. SQL Server Launchpad サービスのユーザー名 にアクセス許可を付与します。Give permissions to SQL Server Launchpad Service user name.

    icacls "%PYTHONHOME%" /grant "NT Service\MSSQLLAUNCHPAD$MSSQLSERVER":(OI)(CI)RX /T
    
    
  2. Give permissions to SID S-1-15-2-1.

    icacls "%PYTHONHOME%" /grant *S-1-15-2-1:(OI)(CI)RX /T
    
    

注意

The preceding command grants permissions to the computer SID S-1-15-2-1, which is equivalent to ALL APPLICATION PACKAGES on an English version of Windows. Alternatively, you can use icacls "%R_HOME%" /grant "ALL APPLICATION PACKAGES":(OI)(CI)RX /T on an English version of Windows.

Restart SQL Server Launchpad service

From an elevated command prompt, run the following commands. Replace "MSSQLSERVER" with the name of your SQL Server instance.

net stop MSSQLLAUNCHPAD$MSSQLSERVER
net start MSSQLLAUNCHPAD$MSSQLSERVER

または、システムの [サービス] アプリで SQL Server Launchpad サービスを右クリックし、 [再起動] コマンドをクリックします。Alternatively, right-click the SQL Server Launchpad service in the Services app of the system and click the Restart command. または、SQL Server 構成マネージャーを使用して、サービスを再起動します。Or use SQL Server Configuration Manager to restart the service.

Python 言語拡張機能をダウンロードするDownload Python language extension

Windows 用 Python 言語拡張機能が含まれている zip ファイルをダウンロードします。Download the zip file containing the Python language extension for Windows. 運用環境ではリリース バージョンを使用することをお勧めします。Recommended to use the release version in production. 開発またはテストではデバッグ バージョンを使用します。エラーを調査するための詳細なログ情報が提供されるためです。Use the debug version in development or test since it provides verbose logging information to investigate any errors.

外部言語を登録するRegister external language

拡張機能を使用するデータベースごとに、CREATE EXTERNAL LANGUAGE でこの Python 言語拡張機能を登録します。Register this Python language extension with CREATE EXTERNAL LANGUAGE for each database you want to use it in. Azure Data Studio を使用して SQL Server に接続し、次の T-SQL コマンドを実行します。Use Azure Data Studio to connect to SQL Server and run the following T-SQL command. このステートメントのパスを変更して、ダウンロードした言語拡張機能の zip ファイル (python-lang-extension.zip) の場所を反映します。Modify the path in this statement to reflect the location of the downloaded language extension zip file (python-lang-extension.zip).

注意

Python は予約語です。Python is a reserved word. 外部言語には別の名前を使用します (たとえば "myPython")。Use a different name for the external language, for example, "myPython".

CREATE EXTERNAL LANGUAGE [myPython]
FROM (CONTENT = N'/path/to/python-lang-extension.zip', FILE_NAME = 'pythonextension.dll');
GO

SQL Server は、Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES)、および Ubuntu にインストールできます。You can install SQL Server on Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES), and Ubuntu. 詳細については、「SQL Server on Linux のインストール ガイド」の「サポートされているプラットフォーム」を参照してください。For more information, see the Supported platforms section in the Installation guidance for SQL Server on Linux.

注意

この記事では、Linux に Python 用のカスタム ランタイムをインストールする方法について説明します。This article describes how to install a custom runtime for Python on Linux. Windows にインストールするには、SQL Server on Windows 用 Python カスタム ランタイムのインストールに関するページを参照してください。To install on Windows, see the Install a Python custom runtime for SQL Server on Windows

インストール前のチェックリストPre-install checklist

Python カスタム ランタイムをインストールする前に、次のものをインストールします。Before installing a Python custom runtime, install the following:

Linux 用の SQL Server 言語拡張機能を追加するAdd SQL Server Language Extensions for Linux

注意

SQL Server 2019 に Machine Learning Services がインストールされている場合は、言語拡張機能用の mssql-server-extensibility パッケージが既にインストールされているため、この手順は省略できます。If you have Machine Learning Services installed on SQL Server 2019, the mssql-server-extensibility package for language extensions is already installed and you can skip this step.

言語拡張機能では、外部コードの実行に機能拡張フレームワークが使用されます。Language Extensions use the extensibility framework for executing external code. コードの実行はコア エンジン プロセスから分離されていますが、SQL Server のクエリ実行と完全に統合されています。Code execution is isolated from the core engine processes, but fully integrated with SQL Server query execution.

Linux のバージョンに応じて、次のコマンドを使用して言語拡張機能をインストールします。Use the following commands to install Language Extensions, depending on your version of Linux.

UbuntuUbuntu

ヒント

可能であれば、update を使用して、インストールの前にシステム上のパッケージを更新しておきます。If possible, update to refresh packages on the system prior to installation. Ubuntu には、https apt transport オプションがない可能性があります。Ubuntu might not have the https apt transport option. インストールするには、apt-get install apt-transport-https を使用します。To install it, use apt-get install apt-transport-https.

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

Red HatRed Hat

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

SuseSuse

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

Python 3.7 と pandas をインストールするInstall Python 3.7 and pandas

Python 3.7、libpython3.7 ライブラリ、および pandas パッケージをインストールします。Install Python 3.7, the libpython3.7 library, and the pandas package.

Ubuntu のコマンドの例を次に示します。The following are example commands for Ubuntu:

# Install python3.7 and the corresponding library:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.7 python3-pip libpython3.7

# Install pandas to /usr/lib:
sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages

Python 3.7 のカスタム インストールを使用するUsing a custom installation of Python 3.7

注意

Python を /usr/lib/python3.7 の既定の場所にインストールした場合は、次のセクションにスキップできます。If you have installed Python in the default location of /usr/lib/python3.7, you can skip to the next section.

独自のバージョンの Python 3.7 をビルドした場合は、次のコマンドを使用して、SQL Server でカスタム インストールを見つけて読み込むことができるようにします。If you built your own version of Python 3.7, use the following commands so that SQL Server can find and load your custom installation.

環境変数を更新するUpdate the environment variables

  1. mssql-launchpadd サービスを編集して、PYTHONHOME 環境変数を /etc/systemd/system/mssql-launchpadd.service.d/override.conf ファイルに追加しますEdit the mssql-launchpadd service to add the PYTHONHOME environment variable to the file /etc/systemd/system/mssql-launchpadd.service.d/override.conf

    sudo systemctl edit mssql-launchpadd
    
    • 開かれた /etc/systemd/system/mssql-launchpadd.service.d/override.conf ファイルに、次のテキストを挿入します。Insert the following text in the /etc/systemd/system/mssql-launchpadd.service.d/override.conf file that opens. PYTHONHOME の値をカスタムの Python インストール パスに設定します。Set value of PYTHONHOME to the custom Python installation path.

      [Service]
      Environment="PYTHONHOME=/path/to/installation/of/python3.7"
      
    • 保存して閉じます。Save and close.

  2. libpython3.7m.so.1.0 を読み込めることを確認します。Make sure libpython3.7m.so.1.0 can be loaded.

    • /etc/ld.so.conf.d 内に custom-python.conf ファイルを作成します。Create a custom-python.conf file in /etc/ld.so.conf.d.

      sudo vi /etc/ld.so.conf.d/custom-python.conf
      
    • 開かれたファイルに、カスタムの Python インストールから libpython3.7m.so.1.0 へのパスを追加します。In the file that opens, add the path to libpython3.7m.so.1.0 from the custom Python installation.

      /path/to/installation/of/python3.7/lib
      
    • 新しいファイルを保存して閉じます。Save and close the new file.

    • ldconfig を実行し、次のコマンドを実行することで libpython3.7m.so.1.0 を読み込めることを確認し、すべての依存ライブラリが見つかることを確認します。Run ldconfig and verify libpython3.7m.so.1.0 can be loaded by running the following commands and checking that all the dependent libraries can be found.

      sudo ldconfig
      ldd /path/to/installation/of/python3.7/lib/libpython3.7m.so.1.0
      

カスタム Python フォルダーへのアクセスを許可するGrant access to the custom Python folder

/var/opt/mssql/mssql.conf ファイルの extensibility セクションにある datadirectories オプションを、カスタム Python のインストールに設定します。Set the datadirectories option in the extensibility section of /var/opt/mssql/mssql.conf file to the custom python installation.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories /path/to/installation/of/python3.7

mssql-launchpadd サービスを再起動するRestart the mssql-launchpadd service

sudo systemctl restart mssql-launchpadd

Python 言語拡張機能をダウンロードするDownload Python language extension

Linux 用 Python 言語拡張機能が含まれている zip ファイルをダウンロードします。Download the zip file containing the Python language extension for Linux. 運用環境ではリリース バージョンを使用することをお勧めします。Recommended to use the release version in production. 開発またはテストではデバッグ バージョンを使用します。エラーを調査するための詳細なログ情報が提供されるためです。Use the debug version in development or test since it provides verbose logging information to investigate any errors.

外部言語を登録するRegister external language

拡張機能を使用するデータベースごとに、CREATE EXTERNAL LANGUAGE でこの Python 言語拡張機能を登録します。Register this Python language extension with CREATE EXTERNAL LANGUAGE for each database you want to use it in. Azure Data Studio を使用して SQL Server に接続し、次の T-SQL コマンドを実行します。Use Azure Data Studio to connect to SQL Server and run the following T-SQL command. このステートメントのパスを変更して、ダウンロードした言語拡張機能の zip ファイル (python-lang-extension.zip) の場所を反映します。Modify the path in this statement to reflect the location of the downloaded language extension zip file (python-lang-extension.zip).

注意

Python は予約語です。Python is a reserved word. 外部言語には別の名前を使用します (たとえば "myPython")。Use a different name for the external language, for example, "myPython".

CREATE EXTERNAL LANGUAGE myPython 
FROM (CONTENT = N'/PATH/TO/python-lang-extension.zip', FILE_NAME = 'libPythonExtension.so.1.0');
GO

SQL Server で外部スクリプトの実行を有効にするEnable external script execution in SQL Server

Python の外部スクリプトは、ストアド プロシージャ sp_execute_external スクリプトを SQL Server に対して実行することによって実行できます。An external script in Python can be executed via the stored procedure sp_execute_external script run against SQL Server.

外部スクリプトを有効にするには、SQL Server に接続されている Azure Data Studio を使用して、次の SQL コマンドを実行します。To enable external scripts, execute the following SQL commands using Azure Data Studio, connected to SQL Server.

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

言語拡張機能のインストールを確認するVerify language extension installation

この SQL スクリプトでは、インストールされている言語拡張機能をテストします。This SQL script tests the functionality of the installed language extension.

EXEC sp_execute_external_script
@language =N'myPython',
@script=N'
import sys
print(sys.path)
print(sys.version)
print(sys.executable)'

さまざまなデータ型のパラメーターとデータセットを検証するVerify parameters and datasets of different data types

このスクリプトを使用して、入力と出力のパラメーターおよびデータセットのさまざまなデータ型をテストします。This script tests different data types for input/output parameters and datasets.

DECLARE @sumVal int = 12;
DECLARE @charVal VARCHAR(30) = N'Hello'

EXEC sp_execute_external_script
@language =N'myPython',
@script=N'
print(sumVal)
print(charVal)
sumVal = sumVal + 300
OutputDataSet = InputDataSet'
,@input_data_1 = N'SELECT 1, CAST(1.4 as real), ''Hi'', CAST(''1'' as bit)'
,@params = N'@sumVal int OUTPUT, @charVal VARCHAR(30)'
,@sumVal = @sumVal OUTPUT
,@charVal = @charVal
WITH RESULT SETS ((intCol int, doubleCol real, charCol char(2), logicalCol bit));

PRINT @sumVal

次の手順Next steps