Python の統合をサポートするために SQL Server のコンポーネントComponents in SQL Server to support Python integration

SQL Server 2017 以降は、Machine Learning のサービスは、T-SQL から実行できるまたはリモート計算コンテキストとして SQL Server を使用して実行する外部の言語としての Python をサポートします。Beginning in SQL Server 2017, Machine Learning Services supports Python as an external language that can be executed from T-SQL, or executed remotely using SQL Server as the compute context.

ここでは、一般に拡張性をサポートする SQL Server 2017 および Python 言語でのコンポーネントを具体的に説明します。This topic describes the components in SQL Server 2017 that support extensibility in general and the Python language specifically.

SQL Server コンポーネントおよびプロバイダーSQL Server components and providers

Python スクリプトの実行を許可する SQL Server 2017 を構成するのにはの複数の手順を実行します。To configure SQL Server 2017 to allow Python script execution is a multi-step process.

  1. 拡張機能をインストールします。Install the extensibility feature.
  2. 外部スクリプト実行機能を有効にします。Enable the external script execution feature.
  3. データベース エンジン サービスを再起動します。Restart the database engine service.

追加の手順は、リモート スクリプトの実行をサポートする必要があります。Additional steps might be required to support remote script execution.

詳細については、次を参照してくださいMachine Learning のサービスの設定。For more information, see Set up Machine Learning Services

スタート パッドLaunchpad

SQL Server の信頼されたスタート パッドは、サービスを管理し、フルテキスト インデックス作成とクエリ サービスが、フルテキスト クエリを処理するため、独立したホストを起動する場合と同様に、外部のスクリプトを実行する SQL Server 2016 で導入されました。The SQL Server Trusted Launchpad is a service introduced in SQL Server 2016 that manages and executes external scripts, similar to the way that the full-text indexing and query service launches a separate host for processing full-text queries.

スタート パッド サービスには、Microsoft によってパブリッシュされているかは Microsoft によってパフォーマンスとリソース管理の要件を満たすとして認定されている信頼されたランチャーのみを開始できます。The Launchpad service can start only trusted launchers that are published by Microsoft, or that have been certified by Microsoft as meeting requirements for performance and resource management.

  • SQL Server 2017 R および Python 3.5 をサポートしていますSQL Server 2017 supports R and Python 3.5
  • SQL Server 2016 は、R をサポートしています。SQL Server 2016 supports R

SQL Server Trusted LaunchpadSQL Server Trusted Launchpad サービスは、独自のユーザー アカウント下で実行されます。The SQL Server Trusted LaunchpadSQL Server Trusted Launchpad service runs under its own user account.

ヒント

スタート パッドを実行するアカウントを変更する場合は、関連するファイルに変更が書き込まれることを確認する SQL Server 構成マネージャーを使用してこれを行うに必ずです。If you change the account that runs Launchpad, be sure to do so using SQL Server Configuration Manager, to ensure that changes are written to related files.

特定のサポートされている言語で、タスクを実行するには、スタート パッドは、プールからワーカーをセキュリティで保護されたアカウントを取得し、外部のランタイムを管理するサテライト プロセスを開始します。To execute tasks in a specific supported language, the Launchpad gets a secured worker account from the pool, and starts a satellite process to manage the external runtime:

  • R 言語の RLauncher.dllRLauncher.dll for the R language
  • Python 3.5 の Pythonlauncher.dllPythonlauncher.dll for Python 3.5

各サテライト プロセスは、スタート パッドのユーザー アカウントを継承し、スクリプトの実行中のワーカー アカウントを使用します。Each satellite process inherits the user account of the Launchpad and uses that worker account for the duration of script execution. Python スクリプトは、並列処理を使用している場合は、同じ、1 つのワーカー アカウントが作成されます。If the Python script uses parallel processes, they are created under the same, single worker account.

スタート パッドのセキュリティ コンテキストの詳細については、次を参照してください。セキュリティです。For more information about the security context of the Launchpad, see Security.

BxlServer と SQL サテライトBxlServer and SQL Satellite

実行する場合プロセス エクスプ ローラー Python ジョブの実行中に、BxlServer の 1 つまたは複数のインスタンスを参照してください可能性があります。If you run Process Explorer while a Python job is running, you might see one or multiple instances of BxlServer.

BxlServer間の通信を管理する Microsoft によって提供される実行可能ファイルは、 SQL ServerSQL Serverおよび Python (R) します。BxlServer is an executable provided by Microsoft that manages communication between SQL ServerSQL Server and Python (or R). 外部スクリプト セッション、各ジョブの外部のスクリプトの作業フォルダーはセキュリティで保護された規定を格納するための外部のランタイム間のデータ転送を管理する SQL サテライトを使用して Windows ジョブ オブジェクトを作成し、 SQL ServerSQL Serverです。It creates the Windows job objects that are used to contain external script sessions, provisions secure working folders for each external script job, and uses SQL Satellite to manage data transfer between the external runtime and SQL ServerSQL Server.

BxlServer で動作する Python に対応するは、実際には、 SQL ServerSQL Serverデータの転送タスクおよび管理します。In effect, BxlServer is a companion to Python that works with SQL ServerSQL Server to transfer data and manage tasks. BXL はバイナリ交換言語の略し、SQL Server と外部プロセス間でデータを効率的に移動するためのデータ形式を参照します。BXL stands for Binary Exchange language and refers to the data format used to move data efficiently between SQL Server and external processes. BxlServer も Microsoft R Client および Microsoft R サーバーの重要な部分です。BxlServer is also an important part of Microsoft R Client and Microsoft R Server.

SQL サテライトが外部コードをサポートする、SQL Server 2016 以降で、データベース エンジンに含まれる機能拡張 API または外部のランタイム C または C++ を使用して実装します。SQL Satellite is an extensibility API, included in the database engine starting with SQL Server 2016, that supports external code or external runtimes implemented using C or C++.

BxlServer は、次のタスクに SQL サテライトを使用します。BxlServer uses SQL Satellite for these tasks:

  • 入力データの読み取りReading input data
  • 出力データの書き込みWriting output data
  • 入力引数の取得Getting input arguments
  • 出力引数の書き込みWriting output arguments
  • エラー処理Error handling
  • STDOUT と STDERR のクライアントへの書き戻しWriting STDOUT and STDERR back to client

SQL サテライト間で高速なデータを転送用に最適化されたカスタム データ形式を使用して SQL ServerSQL Serverと外部のスクリプト言語です。SQL Satellite uses a custom data format that is optimized for fast data transfer between SQL ServerSQL Server and external script languages. 型変換を実行し、間の通信中に入力と出力データセットのスキーマを定義 SQL ServerSQL Serverと外部スクリプトの実行時。It performs type conversions and defines the schemas of the input and output datasets during communications between SQL ServerSQL Server and the external script runtime.

SQL サテライトは、windows の拡張イベント (Xevent) を使用して監視できます。The SQL Satellite can be monitored by using windows extended events (xEvents). 詳細については、次を参照してください。 R の拡張イベントです。For more information, see Extended Events for R.

コンポーネント間の通信チャネルCommunication channels between components

  • TCP/IPTCP/IP

    既定では、間の内部通信 SQL ServerSQL ServerSQL サテライト TCP/IP を使用するとします。By default, internal communications between SQL ServerSQL Server and the SQL Satellite use TCP/IP.

  • 名前付きパイプNamed Pipes

    SQL サテライトを通じた BxlServer と SQL ServerSQL Server 間の内部データ転送では、パフォーマンスを強化するために、専用の圧縮データ形式が使用されます。Internal data transport between the BxlServer and SQL ServerSQL Server through SQL Satellite uses a proprietary, compressed data format to enhance performance. データは、名前付きパイプを使用して、BXL 形式での Python と BxlServer 間で交換されます。Data is exchanged between Python and BxlServer in BXL format, using Named Pipes.

  • ODBCODBC

    外部データ サイエンス クライアント間の通信、および SQL ServerSQL Serverインスタンスは、ODBC を使用します。Communications between external data science clients and the SQL ServerSQL Server instance use ODBC. スクリプトが送信するアカウントのジョブを SQL ServerSQL Serverインスタンスに接続し、外部スクリプトを実行するには、両方のアクセス許可を持つ必要があります。The account that sends the script jobs to SQL ServerSQL Server must have both permissions to connect to the instance and to run external scripts.

    さらに、タスクによっては、アカウントは、これらのアクセス許可を必要があります。Additionally, depending on the task, the account might need these permissions:

    • ジョブによって使用されるデータの読み取りRead data used by the job
    • テーブルにデータを書き込むたとえば、と保存の結果をテーブル。Write data to tables: for example, when saving results to a table
    • データベース オブジェクトを作成します。 新しいストアド プロシージャの一部として外部スクリプトを保存する場合などです。Create database objects: for example, if saving external script as part of a new stored procedure.

    ときに SQL ServerSQL Serverがリモート クライアントから Python スクリプトを実行し、Python の実行可能ファイルは、外部ソースからデータを取得する必要があります、コンピューティング コンテキストとして使用して、ODBC が書き戻しに使用します。When SQL ServerSQL Server is used as the compute context for Python script executed from a remote client, and the Python executable must retrieve data from an external source, ODBC is used for writeback. SQL ServerSQL Server現在のインスタンスでは、ユーザーの id に、リモート コマンドを発行するユーザーの id をマップし、そのユーザーの資格情報を使用して、ODBC コマンドを実行します。 will map the identity of the user issuing the remote command to the identity of the user on the current instance, and run the ODBC command using that user's credentials. この ODBC 呼び出しを実行するために必要な接続文字列は、クライアント コードから取得されます。The connection string needed to perform this ODBC call is obtained from the client code.

コンポーネントの相互作用Interaction of components

次の図は、Python ランタイムでサポートされるシナリオの各と SQL Server コンポーネントの相互作用を表している: SQL Server のコンピューティング コンテキストを使用して、Python 端末からスクリプトのデータベース内、およびリモートの実行を実行します。The following diagrams depict the interaction of SQL Server components with the Python runtime in each of the supported scenarios: running script in-database, and remote execution from a Python terminal, using a SQL Server compute context.

Python スクリプト データベース内の実行Python scripts executed in-database

「内部」Python を実行すると SQL ServerSQL Server、特殊なストアド プロシージャ内の Python スクリプトをカプセル化する必要がありますsp_execute_external_scriptです。When you run Python "inside" SQL ServerSQL Server, you must encapsulate the Python script inside a special stored procedure, sp_execute_external_script.

ストアド プロシージャに埋め込まれたスクリプト、ストアド プロシージャを呼び出すと、すべてのアプリケーションは、Python コードの実行を開始できます。After the script has been embedded in the stored procedure, any application that can make a stored procedure call can initiate execution of the Python code. その後 SQL ServerSQL Serverの次の図に示すように、コードの実行を管理します。Thereafter SQL ServerSQL Server manages code execution as summarized in the following diagram.

スクリプトで db python

  1. Python ランタイムの要求が、パラメーターで示される @language= 'Python'_ストアド プロシージャに渡されます。A request for the Python runtime is indicated by the parameter @language='Python'_ passed to the stored procedure. SQL Server では、スタート パッド サービスにこの要求を送信します。SQL Server sends this request to the Launchpad service.
  2. スタート パッド サービスの開始、適切なランチャーです。この場合、PythonLauncher です。The Launchpad service starts the appropriate launcher; in this case, PythonLauncher.
  3. PythonLauncher は、Python35 の外部プロセスを開始します。PythonLauncher starts the external Python35 process.
  4. BxlServer は、データの交換と作業の結果のストレージを管理する Python ランタイムと連携します。BxlServer coordinates with the Python runtime to manage exchanges of data, and storage of working results.
  5. SQL サテライト関連のタスクについての通信を管理および処理し、 SQL ServerSQL Serverです。SQL Satellite manages communications about related tasks and processes with SQL ServerSQL Server.
  6. BxlServer が SQL サテライトを使用して状態を通信し、結果を SQL ServerSQL Server に送信します。BxlServer uses SQL Satellite to communicate status and results to SQL ServerSQL Server.
  7. SQL ServerSQL Server が結果を取得し、関連するタスクとプロセスを終了します。 gets results and closes related tasks and processes.

リモート クライアントから実行された Python スクリプトPython scripts executed from a remote client

ラップトップなどのリモート コンピューターから Python スクリプトを実行し、これらの条件が満たされる場合がある SQl Server コンピューターのコンテキストで実行したりできます。You can run Python scripts from a remote computer, such as a laptop, and have them execute in the context of the SQl Server computer, if these conditions are met:

  • スクリプトを適切にデザインします。You design the scripts appropriately
  • リモート コンピューターには、Machine Learning サービスによって使用されている機能拡張ライブラリがインストールされています。The remote computer has installed the extensibility libraries that are used by Machine Learning Services

次の図は、スクリプトがリモート コンピューターから送信されるときに、全体的なワークフローをまとめたものです。The following diagram summarizes the overall workflow when scripts are sent from a remote computer.

リモート sqlcc から python

  1. サポートされている関数のrevoscalepy、Python ランタイムは BxlServer を呼び出し、リンクの関数を呼び出します。For functions that are supported in revoscalepy, the Python runtime calls a linking function, which in turn calls BxlServer.
  2. BxlServer では、Machine Learning Services (In-database) に含まれてし、Python ランタイムから別のプロセスで実行します。BxlServer is included with Machine Learning Services (In-Database) and runs in a separate process from the Python runtime.
  3. BxlServer では、接続のターゲットを決定し、Python スクリプト内の接続文字列の一部として提供された資格情報を渡して、ODBC を使用して接続を開始します。BxlServer determines the connection target and initiates a connection using ODBC, passing credentials supplied as part of the connection string in the Python script.
  4. BxlServer が SQL ServerSQL Server インスタンスへの接続を開きます。BxlServer opens a connection to the SQL ServerSQL Server instance.
  5. 外部のスクリプトの実行時が呼び出されると、スタート パッド サービスが呼び出され、さらに、適切なランチャーが開始する: この場合、PythonLauncher.dll です。When an external script runtime is called, the Launchpad service is invoked, which in turn starts the appropriate launcher: in this case, PythonLauncher.dll. その後、Python コードの処理は、T-SQL でストアド プロシージャから Python コードが呼び出されたときにするときと同様、ワークフローで処理されます。Thereafter, processing of Python code is handled in a workflow similar to that when Python code is invoked from a stored procedure in T-SQL.
  6. PythonLauncher にインストールされている Python のインスタンスへの呼び出しを行い、 SQL ServerSQL Serverコンピューター。PythonLauncher makes a call to the instance of the Python that is installed on the SQL ServerSQL Server computer.
  7. 結果が BxlServer に返されます。Results are returned to BxlServer.
  8. SQL サテライトは、 SQL ServerSQL Server との通信と、関連するジョブ オブジェクトのクリーンアップを管理します。SQL Satellite manages communication with SQL ServerSQL Server and cleanup of related job objects.
  9. SQL ServerSQL Server がクライアントに結果を返します。 passes results back to the client.

次の手順Next steps

SQL Server での Python のアーキテクチャの概要Architecture overview for Python in SQL Server