クイック スタート: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 インストール ガイドに関するページを参照してください。
  • 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))
  1. Azure Data Studio を開き、ご自身のサーバーに接続します。

  2. 完全な 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))
    '
    
  3. 適切な結果が計算され、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

  1. テスト データの小さなテーブルを作成します。

    CREATE TABLE RTestData (col1 INT NOT NULL)
    
    INSERT INTO RTestData
    VALUES (1);
    
    INSERT INTO RTestData
    VALUES (10);
    
    INSERT INTO RTestData
    VALUES (100);
    GO
    
  2. テーブルのクエリを実行するには、SELECT ステートメントを使用します。

    SELECT *
    FROM RTestData
    

    結果

    RTestData テーブルの内容

  3. 次の 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));
    

    結果

    テーブルからデータを返す R スクリプトからの出力

  4. 次に、入力変数と出力変数の名前を変更します。 既定の入力変数名と出力変数名は InputDataSetOutputDataSet で、このスクリプトによって名前が 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_outSQL_in)、大文字と小文字を区別して、@input_data_1_name@output_data_1_name で定義されている名前と一致する必要があります。

    ヒント

    パラメーターとして渡すことができる入力データセットは 1 つだけです。また、返すことのできるデータセットも 1 つだけです。 ただし、R コード内から他のデータセットを呼び出し、そのデータセットに加えて、他の種類の出力を返すことができます。 任意のパラメーターに OUTPUT キーワードを追加することもでき、その場合は、パラメーターに結果が返されます。

  5. 入力データを含まない 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));
    

    結果

    <span class=@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() からのものであり、結果セットとして返されます。

結果

R のインストール済みパッケージ

次のステップ

SQL 機械学習で R を使用する場合のデータ構造の使用方法については、次のクイックスタートを参照してください。