適用対象: SQL Server 2016 (13.x) 以降のバージョン
これは、SQL Server で RevoScaleR 関数を使用する方法についての RevoScaleR チュートリアル シリーズのチュートリアル 4 です。
前のチュートリアルでは、RevoScaleR 関数を使用してデータ オブジェクトを検査しました。 このチュートリアルでは、リモート SQL Server のコンピューティング コンテキストを定義できる、RxInSqlServer 関数について説明します。 リモートのコンピューティング コンテキストを使用すると、ローカル セッションからサーバー上のリモート セッションに R の実行をシフトできます。
- リモート SQL Server のコンピューティング コンテキストの要素について学ぶ
- コンピューティング コンテキスト オブジェクトでトレースを有効にする
RevoScaleR では、複数のコンピューティング コンテキストがサポートされています。Hadoop、HDFS 上の Spark、およびデータベース内の SQL Server。 SQL Server の場合、RxInSqlServer 関数がサーバー接続に使用され、ローカル コンピューターとリモート実行コンテキストの間でオブジェクトを渡します。
コンピューティング コンテキストを作成および設定する
SQL Server コンピューティング コンテキストを作成する RxInSqlServer 関数は、次の情報を使用します。
- SQL Server インスタンスの接続文字列
- 出力の処理方法の指定
- 共有データ ディレクトリの指定 (省略可能)
- トレースを有効にするかトレース レベルを指定する、省略可能な引数
このセクションでは、それぞれの手順について説明します。
計算を実行するインスタンスの接続文字列を指定します。 前に作成した接続文字列を再利用できます。
SQL ログインを使用する
sqlConnString <- "Driver=SQL Server;Server=<SQL Server instance name>; Database=<database name>;Uid=<SQL user nme>;Pwd=<password>"
Windows 認証を使用する
sqlConnString <- "Driver=SQL Server;Server=instance_name;Database=RevoDeepDive;Trusted_Connection=True"
出力の処理方法を指定します。 次の操作を処理する前に、サーバー上で R ジョブの結果を待つようにローカル R セッションに指示するスクリプトを次に示します。 また、リモートの計算からの出力が、ローカル セッションに表示されないようにします。
sqlWait <- TRUE sqlConsoleOutput <- FALSE
RxInSqlServer に渡す wait 引数は、次のオプションをサポートします。
TRUE。 ジョブはブロック中として構成され、制御は完了するか失敗するまで戻りません。
FALSE。 ジョブは非ブロックとして構成され、制御は直ちに戻ります。これにより、引き続き他の R コードを実行することができます。 ただし、非ブロック モードであっても、ジョブの実行中は SQL Server とのクライアント接続を維持する必要があります。
必要に応じて、ローカルの R セッション、およびリモートの SQL Server コンピューターとそのアカウントによって共有される、ローカル ディレクトリの場所を指定します。
sqlShareDir <- paste("c:\\AllShare\\", Sys.getenv("USERNAME"), sep="")
共有のために特定のディレクトリを手動で作成する場合は、次のような行を追加します。
dir.create(sqlShareDir, recursive = TRUE)
RxInSqlServer コンストラクターに引数を渡して、コンピューティング コンテキスト オブジェクトを作成します。
sqlCompute <- RxInSqlServer( connectionString = sqlConnString, wait = sqlWait, consoleOutput = sqlConsoleOutput)
RxInSqlServer の構文は、前にデータソースを定義するために使用した RxSqlServerData 関数とほぼ同じです。 しかし、次に示すいくつかの重要な相違点があります。
RxSqlServerData関数を使用して定義するデータ ソース オブジェクトは、データの保存場所を指定します。
これに対し、関数 RxInSqlServer を使用して定義されたコンピューティング コンテキストは、集計やその他の計算を実行する場所を指定します。
計算コンテキストを定義しても、ワークステーションで実行されるその他の一般的な R 計算に影響なく、データのソースは変わりません。 たとえば、データ ソースとしてローカル テキスト ファイルを定義できますが、計算コンテキストを SQL Server に変更し、すべての読み取りと集計を SQL Server コンピューター上のデータに対して行うことができます。
リモート コンピューティング コンテキストをアクティブ化します。
rxSetComputeContext(sqlCompute)
プロパティを含む、コンピューティング コンテキストに関する情報を返します。
rxGetComputeContext()
"local" キーワードを指定して、コンピューティング コンテキストをローカル コンピューターに戻します (次のチュートリアルでは、リモート コンピューティング コンテキストの使用方法を示します)。
rxSetComputeContext("local")
ヒント
この関数でサポートされているその他のキーワードの一覧が必要な場合、R コマンド ラインに「 help("rxSetComputeContext")
」と入力してください。
トレースを有効にする
リモート計算コンテキストで実行すると、ローカル コンテキストで動作する操作で問題が発生することがあります。 問題を分析したりパフォーマンスを監視したりする場合は、実行時のトラブルシューティングを支援するために、コンピューティング コンテキストでトレースを有効にすることができます。
同じ接続文字列を使用する新しいコンピューティング コンテキストを作成しますが、引数 traceEnabled と traceLevel を、RxInSqlServer コンストラクターに追加します。
sqlComputeTrace <- RxInSqlServer( connectionString = sqlConnString, #shareDir = sqlShareDir, wait = sqlWait, consoleOutput = sqlConsoleOutput, traceEnabled = TRUE, traceLevel = 7)
この例では、traceLevel プロパティを 7 に設定してあります。これは、"すべてのトレース情報を表示する" ことを意味します。
トレースが有効なコンピューティング コンテキストを名前で指定するには、rxSetComputeContext 関数を使用します。
rxSetComputeContext(sqlComputeTrace)
次のステップ
サーバーまたはローカルで R コードを実行するように、コンピューティング コンテキストを切り替える方法について説明します。