クイック スタート:SQL 機械学習を使用して単純な R スクリプトを実行する
適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Managed Instance
このクイックスタートでは、SQL Server Machine Learning Services またはビッグ データ クラスターを使用して、一連の単純な R スクリプトを実行します。 ストアド プロシージャ sp_execute_external_script を使用して、SQL Server インスタンスでスクリプトを実行する方法について説明します。
このクイックスタートでは、SQL Server Machine Learning Services を使用して、一連の単純な R スクリプトを実行します。 ストアド プロシージャ sp_execute_external_script を使用して、SQL Server インスタンスでスクリプトを実行する方法について説明します。
このクイックスタートでは、SQL Server R Services を使用して、一連の単純な R スクリプトを実行します。 ストアド プロシージャ sp_execute_external_script を使用して、SQL Server インスタンスでスクリプトを実行する方法について説明します。
このクイックスタートでは、Azure SQL Managed Instance の Machine Learning Services を使用して、一連の単純な R スクリプトを実行します。 ストアド プロシージャ sp_execute_external_script を使用して、データベースでスクリプトを実行する方法について説明します。
前提条件
このクイック スタートを実行するには、次の前提条件を用意しておく必要があります。
- SQL Server Machine Learning Services。 Machine Learning Services をインストールするには、Windows インストール ガイドまたは Linux インストール ガイドに関するページを参照してください。 SQL Server ビッグ データ クラスターで Machine Learning Services を有効にすることもできます。
- SQL Server Machine Learning Services。 Machine Learning Services をインストールするには、Windows インストール ガイドに関するページを参照してください。
- SQL Server 2016 R Services。 R Services をインストールするには、Windows インストール ガイドに関するページを参照してください。
- Azure SQL Managed Instance の Machine Learning Services。 詳細については、Azure SQL Managed Instance の Machine Learning Services の概要に関するページを参照してください。
- R スクリプトを含む SQL クエリを実行するためのツール。 このクイックスタートでは Azure Data Studio を使用します。
単純なスクリプトを実行する
R スクリプトを実行するには、それをシステム ストアド プロシージャ sp_execute_external_script に引数として渡します。 このシステム ストアド プロシージャは、R ランタイムを起動し、R にデータを渡し、R ユーザー セッションを安全に管理し、結果をクライアントに返します。
以降の手順では、次のサンプル R スクリプトを実行します。
a <- 1
b <- 2
c <- a/b
d <- a*b
print(c(c, d))
Azure Data Studio を開き、ご自身のサーバーに接続します。
完全な R スクリプトを
sp_execute_external_script
ストアド プロシージャに渡します。このスクリプトは、
@script
引数を通して渡されます。@script
引数内のすべては、有効な R コードである必要があります。EXECUTE sp_execute_external_script @language = N'R' , @script = N' a <- 1 b <- 2 c <- a/b d <- a*b print(c(c, d)) '
適切な結果が計算され、R の
print
関数から [メッセージ] ウィンドウに結果が返されます。次のように表示されます。
結果
STDOUT message(s) from external script: 0.5 2
Hello World スクリプトを実行する
一般的なスクリプトの例では、文字列 "Hello World" が出力されるだけです。 次のコマンドを実行します。
EXECUTE sp_execute_external_script @language = N'R'
, @script = N'OutputDataSet<-InputDataSet'
, @input_data_1 = N'SELECT 1 AS hello'
WITH RESULT SETS(([Hello World] INT));
GO
sp_execute_external_script
ストアド プロシージャへの入力は次のとおりです。
入力 | 説明 |
---|---|
@language | 呼び出す言語拡張機能 (この例では R) を定義します |
@script | R ランタイムに渡されるコマンドを定義します この引数には R スクリプト全体を Unicode テキストとして含める必要があります。 nvarchar 型の変数にテキストを追加して、その変数を呼び出すこともできます |
@input_data_1 | クエリによって返されるデータ。R ランタイムに渡され、そこからデータがデータ フレームとして返されます |
結果セットを含む | 句では、返されるデータ テーブルのスキーマを定義し、列名として "Hello World" を追加し、データ型に int を追加します |
このコマンドは、次のテキストを出力します。
Hello World |
---|
1 |
入力と出力を使用する
既定では、sp_execute_external_script
は 1 つのデータセットを入力として受け入れます。通常は、有効な SQL クエリの形式で指定します。 次に、1 つの R データ フレームを出力として返します。
ここでは、sp_execute_external_script
の既定の入力変数と出力変数を使用します。InputDataSet および OutputDataSet。
テスト データの小さなテーブルを作成します。
CREATE TABLE RTestData (col1 INT NOT NULL) INSERT INTO RTestData VALUES (1); INSERT INTO RTestData VALUES (10); INSERT INTO RTestData VALUES (100); GO
テーブルのクエリを実行するには、
SELECT
ステートメントを使用します。SELECT * FROM RTestData
結果
次の R スクリプトを実行します。
SELECT
ステートメントを使用してテーブルからデータを取得し、それを R ランタイムを介して渡し、データをデータ フレームとして返します。WITH RESULT SETS
句では、SQL に対して返されたデータ テーブルのスキーマを定義して、列名 NewColName を追加します。EXECUTE sp_execute_external_script @language = N'R' , @script = N'OutputDataSet <- InputDataSet;' , @input_data_1 = N'SELECT * FROM RTestData;' WITH RESULT SETS(([NewColName] INT NOT NULL));
結果
次に、入力変数と出力変数の名前を変更します。 既定の入力変数名と出力変数名は InputDataSet と OutputDataSet で、このスクリプトによって名前が SQL_in および SQL_out に変更されます。
EXECUTE sp_execute_external_script @language = N'R' , @script = N' SQL_out <- SQL_in;' , @input_data_1 = N' SELECT 12 as Col;' , @input_data_1_name = N'SQL_in' , @output_data_1_name = N'SQL_out' WITH RESULT SETS(([NewColName] INT NOT NULL));
R では大文字と小文字が区別されることに注意してください。 R スクリプトで使用される入力変数と出力変数は (SQL_out、SQL_in)、大文字と小文字を区別して、
@input_data_1_name
と@output_data_1_name
で定義されている名前と一致する必要があります。ヒント
パラメーターとして渡すことができる入力データセットは 1 つだけです。また、返すことのできるデータセットも 1 つだけです。 ただし、R コード内から他のデータセットを呼び出し、そのデータセットに加えて、他の種類の出力を返すことができます。 任意のパラメーターに OUTPUT キーワードを追加することもでき、その場合は、パラメーターに結果が返されます。
入力データを含まない R スクリプトを使用して値を生成することもできます (
@input_data_1
は空白に設定されます)。次のスクリプトは、 "hello" と "world" というテキストを出力します。
EXECUTE sp_execute_external_script @language = N'R' , @script = N' mytextvariable <- c("hello", " ", "world"); OutputDataSet <- as.data.frame(mytextvariable); ' , @input_data_1 = N'' WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));
結果
@script as input" /> を使用したクエリ結果
R バージョンの確認
インストールされている R のバージョンを確認する場合は、次のスクリプトを実行します。
EXECUTE sp_execute_external_script @language = N'R'
, @script = N'print(version)';
GO
R print
関数は、メッセージ ウィンドウにバージョンを返します。 次の出力例では、R バージョン 3.4.4 がインストールされていることがわかります。
結果
STDOUT message(s) from external script:
_
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 4.4
year 2018
month 03
day 15
svn rev 74408
language R
version.string R version 3.4.4 (2018-03-15)
nickname Someone to Lean On
R パッケージの一覧表示
Microsoft では、Machine Learning Services と共にプレインストールされる R パッケージを多数提供しています。
Microsoft では、R Servicesと共にプレインストールされる R パッケージを多数提供しています。
バージョン、依存関係、ライセンス、ライブラリパスの情報など、インストールされている R パッケージの一覧を表示するには、次のスクリプトを実行します。
EXEC sp_execute_external_script @language = N'R'
, @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", "Version", "Depends", "License", "LibPath")]);'
WITH result sets((
Package NVARCHAR(255)
, Version NVARCHAR(100)
, Depends NVARCHAR(4000)
, License NVARCHAR(1000)
, LibPath NVARCHAR(2000)
));
出力は R の installed.packages()
からのものであり、結果セットとして返されます。
結果
次のステップ
SQL 機械学習で R を使用する場合のデータ構造の使用方法については、次のクイックスタートを参照してください。