R をサポートする SQL Server のコンポーネントComponents in SQL Server to support R

SQL Server 2016 および 2017 では、データベース エンジンには、外部のスクリプト言語では、R、Python などの機能拡張をサポートする省略可能なコンポーネントが含まれています。In SQL Server 2016 and 2017, the database engine includes optional components that support extensibility for external script languages, including R and Python. SQL Server 2016; で、R 言語のサポートが追加されましたSQL Server 2017 Machine Learning サービスで追加された Python のサポートです。Support for the R language was added in SQL Server 2016; support for Python was added in SQL Server 2017 Machine Learning Services.

このトピックでは、具体的には、R 言語で動作する新しいコンポーネントについて説明します。This topic describes the new components that work specifically with the R language. これらのコンポーネントがオープン ソース R を扱う方法の詳細については、次を参照してくださいR の相互運用性。For a discussion of how these components work with open source R, see R Interoperability

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

R を読み込み、アーキテクチャ概要に示された方法で R コードを実行するシェルに加え、 SQL ServerSQL Server には、次の追加コンポーネントが含まれています。In addition to the shell that loads R and executes R code as described in the architecture overview, SQL ServerSQL Server includes these additional components.

スタート パッドLaunchpad

SQL Server Trusted LaunchpadSQL Server Trusted Launchpadによって提供されるサービスは、 SQL Server 2017SQL Server 2017フルテキスト インデックス作成とクエリ サービスが、フルテキスト クエリを処理するため、独立したホストを起動する場合と同様に、外部のスクリプトの実行をサポートするためです。The SQL Server Trusted LaunchpadSQL Server Trusted Launchpad is a service provided by SQL Server 2017SQL Server 2017 for supporting execution of 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 will start only trusted launchers that are published by Microsoft, or that have been certified by Microsoft as meeting requirements for performance and resource management. 言語固有の起動ツールの名前を付けることは簡単です。The naming for the language-specific launchers is straightforward:

  • R-RLauncher.dllR - RLauncher.dll
  • Python - PythonLauncher.dllPython - PythonLauncher.dll

SQL Server Trusted LaunchpadSQL Server Trusted Launchpad サービスは、独自のユーザー アカウント下で実行されます。The SQL Server Trusted LaunchpadSQL Server Trusted Launchpad service runs under its own user account. 特定の言語ランタイムに対応する各サテライト プロセスは、スタート パッドのユーザー アカウントを継承します。Each satellite process for a specific language runtime will inherit the user account of the Launchpad. 構成と、スタート パッドのセキュリティ コンテキストに関する詳細については、次を参照してください。セキュリティの概要です。For more information about the configuration and security context of the Launchpad, see Security overview.

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

BxlServer 実行可能ファイル間の通信を管理する Microsoft によって提供されるは SQL ServerSQL ServerR ランタイムとも RevoScaleR 関数を実装します。BxlServer is an executable provided by Microsoft that manages communication between SQL ServerSQL Server and the R runtime and also implements RevoScaleR functions. BxlServer は、R セッションを含めるために使用される Windows ジョブ オブジェクトを作成し、各 R ジョブのセキュアな作業フォルダーをプロビジョンし、SQL サテライトを使用して R と SQL ServerSQL Server の間のデータ転送を管理しす。It creates the Windows job objects that are used to contain R sessions, provisions secure working folders for each R job, and uses SQL Satellite to manage data transfer between R and SQL ServerSQL Server.

事実上、BxlServer は R と対を成すものであり、 SQL ServerSQL Server と連携して R と SQL Server の統合をサポートします。In effect, BxlServer is a companion to R that works with SQL ServerSQL Server to support integration of R with SQL Server. BXL はバイナリ交換言語の略し、Microsoft R Client または Microsoft R Server のインストール時にも R. BxlServer.dll がインストールされているなど、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 such as R. BxlServer.dll is also installed when you install Microsoft R Client or Microsoft R Server.

SQL サテライトは、データベース エンジンによって提供される、SQL Server 2016 の新しい拡張性 API です。C や C++ を使用して実装された外部コードや外部ランタイムをサポートするためのものです。The SQL Satellite is a new extensibility API in SQL Server 2016 that is provided by the database engine to support external code or external runtimes implemented using C or C++. BxlServer は、SQL サテライトを使用して SQL ServerSQL Server と通信します。BxlServer uses SQL Satellite for communicating with SQL ServerSQL Server.

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

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

  • 入力データの読み取りReading input data
  • 出力データの書き込みWriting output data
  • 入力引数の取得Getting input arguments
  • 出力引数の書き込みWriting output arguments
  • エラー処理Error handling
  • 標準出力とエラーに書き戻すクライアントWriting standard output and errors back to the client

SQL サテライトは、拡張イベントを使用して監視できます。The SQL Satellite can be monitored by using Extended Events. 詳しくは、「Extended Events for SQL Server R Services」(SQL Server R Services の拡張イベント) をご覧ください。For more information, see Extended Events for SQL Server R Services.

コンポーネント間の通信チャネル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

    BxlServer 間の内部のデータ転送と SQL ServerSQL ServerSQL サテライト経由でパフォーマンスを強化するために独自の圧縮データ形式を使用します。Internal data transport between the BxlServer and SQL ServerSQL Server via SQL Satellite uses a proprietary, compressed data format to enhance performance. R メモリから BxlServer へのデータは、名前付きパイプを経由して、BXL 形式で交換されます。Data from R memory to BxlServer is exchanged over named pipes in BXL format.

  • ODBCODBC

    外部データ サイエンス クライアント間の通信、および SQL ServerSQL Serverインスタンスは、ODBC を使用します。Communications between external data science clients and the SQL ServerSQL Server instance use ODBC. SQL ServerSQL Server に R ジョブを送信するアカウントには、インスタンスへの接続権限と、外部スクリプトの実行権限の両方が付与されている必要があります。The account that sends the R jobs to SQL ServerSQL Server must have both permissions to connect to the instance and to run external scripts. さらに、アカウントには、ジョブによって使用されるデータへのアクセス権限、データの書き込み権限 (たとえば、結果をテーブルに保存する場合な)、またはデータベース オブジェクトの作成権限 (たとえば、R 関数を新しいストアド プロシージャの一部として 保存する場合) が付与されている必要があります。Additionally, the account must have permission to access any data used by the job, to write data (for example, if saving results to a table), or to create database objects (for example, if saving R functions as part of a new stored procedure).

    SQL ServerSQL Server が、リモート クライアントから送信される R ジョブの計算コンテキストとして使用される場合、R コマンドは外部ソースからデータを取得する必要があります (ODBC は書き戻し用に使用されます)。When SQL ServerSQL Server is used as the compute context for an R job sent from a remote client, and the R command must retrieve data from an external source, ODBC is used for writeback. SQL ServerSQL Server は、リモート R コマンドを発行しているユーザーの ID を、現在のインスタンス上のユーザーの ID にマップし、そのユーザーの資格情報を使用して ODBC コマンドを実行します。 will map the identity of the user issuing the remote R 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.

    追加の ODBC 呼び出しは、RODBC を使用してスクリプト内で実行できます。Additional ODBC calls can be made inside the script by using RODBC. RODBC は、リレーショナル データベースのデータにアクセスするために使用される、一般的な R パッケージです。ただし、パフォーマンスは SQL ServerSQL Server によって使用される同等のプロバイダよりも一般的に低速です。RODBC is a popular R package used to access data in relational databases; however, its performance is generally slower than comparable providers used by SQL ServerSQL Server. 多くの R スクリプトでは、分析に使用する "セカンダリ" データセットを取得するために、RODBC への埋め込み呼び出しが使用されます。Many R scripts use embedded calls to RODBC as a way of retrieving "secondary" datasets for use in analysis. たとえば、モデルをトレーニングするストアド プロシージャでは、モデル トレーニング用のデータを取得するために SQL クエリが定義される場合もありますが、追加要素を取得したり、検索を実行したり、テキスト ファイルや Excel などの外部ソースから新しいデータを取得する場合には、埋め込みの RODBC 呼び出しが使用されます。For example, the stored procedure that trains a model might define a SQL query to get the data for training a model, but use an embedded RODBC call to get additional factors, to perform lookups, or to get new data from external sources such as text files or Excel.

    次のコードは、R スクリプトに埋め込まれた RODBC 呼び出しを示したものです。The following code illustrates an RODBC call embedded in an R script:

    library(RODBC);
    connStr <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name, ";Trusted_Connection=true;", sep="");
    dbhandle <- odbcDriverConnect(connStr)
    OutputDataSet <- sqlQuery(dbhandle, "select * from table_name");
    
  • その他のプロトコルOther protocols

    「チャンク」で動作するか、リモート クライアントにデータを転送する必要がありますを使用することも、します。Microsoft r です。 実際のデータ転送でサポートされている XDF 形式は、エンコードされた blob を通じてです。Processes that might need to work in "chunks" or transfer data back to a remote client can also use the .XDF format supported by Microsoft R. Actual data transfer is via encoded blobs.

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

ここで説明したコンポーネント アーキテクチャは、オープン ソースの R コードを想定どおりに動作させると共に、 SQL ServerSQL Server コンピューターで実行されるコードのパフォーマンスを大幅に向上させる目的で提供されています。The component architecture just described has been provided to guarantee that open source R code can work "as is", while providing greatly increased performance for code that runs on a SQL ServerSQL Server computer. コンポーネントが R ランタイムや SQL ServerSQL Server データベース エンジンとやり取りするメカニズムは、R コードの起動方法によって若干異なります。The mechanism of how the components interact with the R runtime and the SQL ServerSQL Server database engine differs somewhat, depending on how the R code is launched. このセクションでは、主なシナリオについてまとめます。The key scenarios are summarized in this section.

SQL Server データベースから実行された R スクリプトR scripts executed from SQL Server in-database

SQL ServerSQL Server "内部" から実行される R コードは、ストアド プロシージャを呼び出して実行されます。R code that is run from "inside" SQL ServerSQL Server is executed by calling a stored procedure. したがって、R コードの実行は、ストアド プロシージャを呼び出す任意のアプリケーションによって開始できます。Thus, any application that can make a stored procedure call can initiate execution of R code. その後、 SQL ServerSQL Server は次の図に示す方法で、R コードの実行を管理します。Thereafter SQL ServerSQL Server manages the execution of R code as summarized in the following diagram.

rsql_indb780-01

  1. ストアド プロシージャ (sp_execute_external_script) に渡されたパラメーター @language='R' によって、R ランタイムに対する要求が示されます。A request for the R runtime is indicated by the parameter @language='R' passed to the stored procedure, sp_execute_external_script. SQL ServerSQL Server が、この要求をスタート パッド サービスに送信します。 sends this request to the Launchpad service.
  2. スタート パッド サービスが適切なランチャーを起動します (この場合は RLauncher)。The Launchpad service starts the appropriate launcher; in this case, RLauncher.
  3. RLauncher が外部の R プロセスを起動します。RLauncher starts the external R process.
  4. BxlServer が R ランタイムと連携して、 SQL ServerSQL Server とのデータ交換や、作業結果の保存を管理します。BxlServer coordinates with the R runtime to manage exchanges of data with SQL ServerSQL Server 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.

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

コンテキストで R 関数を実行するには接続時に Microsoft R をサポートするリモート データ サイエンス クライアントから、 SQL ServerSQL Server RevoScaleR 関数を使用しています。When connecting from a remote data science client that supports Microsoft R, you can run R functions in the context of SQL ServerSQL Server by using the RevoScaleR functions. これは、上記のワークフローとは異なるものです。次の図に概要を示します。This is a different workflow from the previous one, and is summarized in the following diagram.

rsql_fromR2db-01

  1. RevoScaleR 関数では、R ランタイムは、BxlServer を呼び出してリンク関数を呼び出します。For RevoScaleR functions, the R runtime calls a linking function which in turn calls BxlServer.
  2. BxlServer は Microsoft R と共に提供されているもので、R ランタイムとは別個のプロセスで実行されます。BxlServer is provided with Microsoft R and runs in a separate process from the R runtime.
  3. BxlServer は接続のターゲットを決定し、ODBC を使用して接続を開始して、R データ ソース オブジェクト内の接続文字列の一部として提供された資格情報を渡します。BxlServer determines the connection target and initiates a connection using ODBC, passing credentials supplied as part of the connection string in the R data source object.
  4. BxlServer が SQL ServerSQL Server インスタンスへの接続を開きます。BxlServer opens a connection to the SQL ServerSQL Server instance.
  5. R 呼び出し、サービスが呼び出されると、スタート パッドは有効にすると、適切なランチャー RLauncher が起動します。For an R call, the Launchpad service is invoked, which is turn starts the appropriate launcher, RLauncher. その後の R コードの処理は、T-SQL から R コードを実行する場合のプロセスと同様です。Thereafter, processing of R code is similar to the process for running R code from T-SQL.
  6. RLauncher が、 SQL ServerSQL Server コンピューターにインストールされている R ランタイムのインスタンスへの呼び出しを行います。RLauncher makes a call to the instance of the R runtime 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

アーキテクチャの概要Architecture overview

セキュリティの概要Security overview

セキュリティに関する考慮事項Security considerations