次の方法で共有


クイック スタート:SQL 機械学習を使用した R 関数

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Managed Instance

このクイックスタートでは、SQL Server Machine Learning Services またはビッグ データ クラスターで R の数学関数とユーティリティ関数を使用する方法について説明します。 多くの場合、統計関数は T-SQL での実装が複雑ですが、R では、わずか数行のコードで行うことができます。

このクイックスタートでは、SQL Server Machine Learning Services で R の数学関数とユーティリティ関数を使用する方法について説明します。 多くの場合、統計関数は T-SQL での実装が複雑ですが、R では、わずか数行のコードで行うことができます。

このクイックスタートでは、SQL Server R Services で R の数学関数とユーティリティ関数を使用する方法について説明します。 多くの場合、統計関数は T-SQL での実装が複雑ですが、R では、わずか数行のコードで行うことができます。

このクイックスタートでは、Azure SQL Managed Instance の Machine Learning Services で R を使用する場合に、データ構造体とデータ型を使用する方法について説明します。 R と SQL Managed Instance 間のデータの移動と、発生する可能性のある一般的な問題について説明します。

前提条件

このクイック スタートを実行するには、次の前提条件を用意しておく必要があります。

  • SQL Server Machine Learning Services。 Machine Learning Services をインストールするには、Windows インストール ガイドに関するページを参照してください。
  • R スクリプトを含む SQL クエリを実行するためのツール。 このクイックスタートでは Azure Data Studio を使用します。

乱数を生成するストアド プロシージャを作成する

わかりやすくするために、既定でインストールされて読み込まれる R stats パッケージを使用してみましょう。 パッケージには、一般的な統計タスク用の数百の関数が含まれますが、その中の rnorm 関数は、指定された標準偏差と平均に対し、正規分布を使用して、指定された個数の乱数を生成します。

たとえば、次の R コードは、指定された 3 の標準偏差で、平均値が 50 の 100 個の数値を返します。

as.data.frame(rnorm(100, mean = 50, sd = 3));

この R の行を T-SQL から呼び出すには、次のように、sp_execute_external_script の R スクリプト パラメーターに R 関数を追加します。

EXECUTE sp_execute_external_script
      @language = N'R'
    , @script = N'
         OutputDataSet <- as.data.frame(rnorm(100, mean = 50, sd =3));'
    , @input_data_1 = N'   ;'
      WITH RESULT SETS (([Density] float NOT NULL));

さまざまな乱数のセットを簡単に生成するにはどうすればよいでしょうか。

T-SQL と組み合わせれば簡単です。 ユーザーから引数を取得し、これらの引数を変数として R スクリプトに渡すストアド プロシージャを定義します。

CREATE PROCEDURE MyRNorm (
    @param1 INT
    , @param2 INT
    , @param3 INT
    )
AS
EXECUTE sp_execute_external_script @language = N'R'
    , @script = N'
	     OutputDataSet <- as.data.frame(rnorm(mynumbers, mymean, mysd));'
    , @input_data_1 = N'   ;'
    , @params = N' @mynumbers int, @mymean int, @mysd int'
    , @mynumbers = @param1
    , @mymean = @param2
    , @mysd = @param3
WITH RESULT SETS(([Density] FLOAT NOT NULL));
  • 最初の行は、ストアド プロシージャを実行するときに必要になる SQL 入力パラメーターそれぞれを定義します。

  • @params で始まる行は、R コードで使用されるすべての変数と対応する SQL データ型を定義します。

  • すぐ後に続く行では、SQL パラメーター名と対応する R 変数名をマップします。

これでストアド プロシージャに R 関数がラップされたため、次のように関数を簡単に呼び出してさまざまな値を渡すことができます。

EXECUTE MyRNorm @param1 = 100,@param2 = 50, @param3 = 3

トラブルシューティングのために R ユーティリティ関数を使用する

既定では、utils パッケージが含まれます。このパッケージは、現在の R 環境を調査するためのさまざまなユーティリティ関数を提供します。 これらの関数は、SQL Server と外部環境で R コードが実行する方法に不一致が見つかった場合に役立つ可能性があります。

たとえば、system.timeproc.time など、R のシステム タイミング関数を使用して、R プロセスによって使用される時間をキャプチャし、パフォーマンスの問題を分析することがあります。 例については、「データ機能の作成」チュートリアルを参照してください。R タイミング関数がソリューションに埋め込まれています。

EXECUTE sp_execute_external_script
      @language = N'R'
    , @script = N'
        library(utils);
        start.time <- proc.time();
        
        # Run R processes
        
        elapsed_time <- proc.time() - start.time;'

その他の有用な関数については、「R コード プロファイル関数を使用してパフォーマンスを向上させる」を参照してください。

次のステップ

SQL 機械学習で R を使用して機械学習モデルを作成するには、次のクイック スタートに従ってください。