SQL Server R Services を初めて使う人のための Tips 集 (環境構築・パッケージ管理編)

 

Microsoft Japan Data Platform Tech Sales Team

倉重 秀昭 / Hideaki Kurashige

 

こちらの記事でもご紹介させていただいている通り、SQL Server 2016 では 新たに SQL Server R Services という R の実行基盤が加わりました。

この SQL Server R Services について、マイクロソフト米国本社の Customer Advisory Team ( 通称 CAT ) が 、彼らの Blog 上で SQL Server R Services を利用するにあたっての Tips をまとめています。今回はその中から特に役に立つと思われる項目を取り上げ、付加情報も加えて詳しく解説していきたいと思います。

(1) SQL Server R Services が正しくインストールされている事を確認する方法

SQL Server R Services を実際に業務で使う場合、環境構築担当者と実際にRを使って分析するデータ分析担当が別々というケースがよくあります。

このように環境構築担当と分析担当が異なる場合、ごくまれに環境構築の担当者はインストールが上手くいったと認識しているにもかかわらず、実際には環境構築が上手くいっておらず、分析担当の方が R を使おうとすると上手く動かないという事があります。
この様な事を防ぐために、環境構築の担当者は、以下の T-SQL を実行する事で SQL Server R Services が正しくインストールされているかを確認する事ができます。

■ SQL Server R Services のインストール正常性を確認するための T-SQL

 EXECUTE   sp_execute_external_script@language = N'R', @script = N'OutputDataSet <- InputDataSet', @input_data_1 = N'SELECT 1 as Col'WITH RESULT SETS ((col int not null));GO

SQL Server R Services が正しくインストールされていれば、結果として1が帰ってきます。
返り値がそれ以外の場合には、正しくインストールされていないという事になります。その場合は、トラブルシュートが必要になりますが、トラブルシュートには以下のページが参考になります。

Known Issues for SQL Server R Services

 

(2) インストール済みのパッケージを確認する方法

R を使って分析や開発を行う場合、CRAN 等で公開されているパッケージを利用する事が多いと思いますが
以下のスクリプトを実行する事で、既にインストールされている パッケージを確認する事が可能です。

 

【方法1】SQL Server Data Tools から T-SQL を使って確認する方法

 -- T-SQL を使う場合には、sp_execute_external_script ストアドプロシージャーを用いてRスクリプトを発行します。
EXECUTE [sys].[sp_execute_external_script] @language = N'R',@script = N'
-- installed.packages 関数を使ってインストール済みのパッケージを取得します。packagematrix <- installed.packages();NameOnly <- packagematrix[,1];OutputDataSet <- as.data.frame(NameOnly);'WITH RESULT SETS((PackageName NVARCHAR (250)));

 

【方法2】R Studio などの IDE から R を使って確認する方法

 # SQL Server R Services に接続するための接続文字列を定義します。(以下は SQL Server 認証の場合) con <- "Driver={SQL Server};Server=サーバー名;Database=データベース名;Uid=ユーザ名;Pwd=パスワード"
# SQL Server R Services に接続します。sqlCompute <- RxInSqlServer(connectionString = con,autoCleanup = TRUE,numTasks = 8,consoleOutput = TRUE)
 # rxInstalledPackages 関数をつかってインストール済みのパッケージを表示します。rxInstalledPackages(computeContext = sqlCompute)

 

SQL Server R Services をインストールした直後の状態では、以下のパッケージがインストールされています。

base foreign mgcv RevoRsrConnector stats4
boot graphics nlme RevoScaleR survival
class grDevices nnet RevoTreeView tcltk
cluster grid parallel RevoUtils tools
codetools iterators pkgXMLBuilder RevoUtilsMath translations
KernSmooth RevoIOQ rpart utils
datasets lattice revoIpe RUnit XML
doParallel MASS RevoMods spatial utils
doRSR Matrix RevoPemaR splines  
foreach methods RevoRpeConnector stats  

 

 

各パッケージの詳細は以下のページから確認することが可能です。

※リンク先ページは、Microsoft R Application Network(MRAN)という弊社の公式ページで、Microsoft R に関する様々な情報を掲載したポータルサイトです。

https://mran.microsoft.com/rro/installed/

 

(3) インターネット接続の無い環境でパッケージをインストールする方法

SQL Server R Services を用いて実業務で分析等を行う場合、セキュリティーの観点から サーバーをインターネットに接続させない事も多いと思います。

インターネットに接続していない環境でパッケージを追加する場合は、インターネットに接続された別のマシンからパッケージのバイナリファイルをダウンロードし、SQL Server がインストールされたマシンにコピーしてインストールを行います。

ただ、あるパッケージをインストールしようとすると、そのパッケージが依存する別のパッケージのインストールも必要になる事がほとんどだと思います。手作業で依存するパッケージを調べ、そのパッケージを一つ一つダウンロードしてインストールする事も可能ですが、非常に手間がかかってしまいます。この様な場合には miniCRAN パッケージを利用すると、効率よくパッケージをインストールすることが可能になります( miniCRAN は、パッケージ間の依存関係を取得・可視化したり、ローカル上にパッケージのリポジトリを作成するための機能を提供しているパッケージです)。

 

次に miniCRAN を使い、インターネット接続の無い環境での追加パッケージのインストール方法について、簡単に紹介してみたいと思います。

miniCRAN を用いた、オフライン環境へのパッケージ追加方法は大まかに以下のような流れになります。

 

image

 

 

手順1 インターネットに接続可能な R 実行環境と IDE がインストールされた端末から、以下の R コマンドを実行して、インストール対象のパッケージと依存するパッケージをダウンロードして端末上にパッケージのリポジトリを作成します。

 # miniCRAN パッケージをインストールします(パッケージはインターネット経由でダウンロードされます)
install.packages("miniCRAN")
# miniCRAN パッケージをロードします(※1)
require(miniCRAN)
# miniCRAN パッケージの pkgDep 関数を使い、インストールしたいパッケージ(この場合は ggplot2 )が依存するパッケージ名を出力し、# 変数「 plgList 」に格納します。
plgList<-pkgDep("ggplot2")
# パッケージのダウンロード先を変数「 local_repo 」に格納します。 local_repo <- "C:\\miniCRAN"
# makeRepo 関数を使って、必要なパッケージの Windows 用バイナリ―をダウンロードしローカルにリポジトリを作成します。(※2)makeRepo(pkgList, path=local_repo,type="win.binary")
 

(※1) 以下の様なエラーメッセージが表示された場合には、install.packages(“stringi”) を実行してstringi パッケージを追加でインストールします。

Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :‘stringi’ という名前のパッケージはありません

 

(※2) パッケージファイルを一括ダウンロードする方法として、download.packages 関数を使う方法もありますが、この場合はリポジトリは作成されずに単純にパッケージファイルがダウンロードされるだけです。そのため SQL Server R Services にパッケージをインストールする際には、依存するパッケージを一つ一つ指定してインストールする必要があります。一方 makeRepo を使用するとパッケージリポジトリが作成されますので、パッケージをインストールする際に、install.package 関数の引数に dependencies=TRUE と記載するだけで、関連するパッケージも自動的にインストールされるようになります。

 

手順2 手順1で作成したリポジトリをディレクトリ(今回の例では C:\miniCRAN ディレクトリ)ごと、 DVD-R・USB メモリ等の媒体を使って、SQL Server R Services サーバにコピーします。

 

手順3 SQL Server R Services サーバーで R の IDE を起動して、以下のRスクリプトを実行して パッケージをインストールします。

 # install.packages 関数を使って、ローカルのリポジトリから ggolot2 パッケージをインストールします。
#  引数:libには、SQL Server R Services のライブラリパスを指定します。#  (lib引数を明示的に指定しないと、SQL Server R Services に正しくパッケージが追加されません)
#  引数:repos に手順2でコピーしたリポジトリのパスを指定します。
# 引数に dependencies=TRUE を指定すると、依存するパッケージが自動的にインストールされます。
install.packages("ggplot2",  lib="C:\\Program Files\\Microsoft SQL Server\\MSSQL13.MSSQLSERVER\\R_SERVICES\\library",  repos=paste0("file:///","C:\\miniCRAN\\"),  type="win.binary",  dependencies=TRUE)

 

今回は、SQLServer R Services を初めて使う人のための Tips 集として、環境構築やパッケージ管理に関する事項について紹介いたしました。

次回はデータの可視化についての Tips をご紹介する予定です。