PREDICT (Transact-SQL)

適用対象: SQL Server 2017 (14.x) 以降 Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

格納されているモデルに基づいて予測値やスコアを生成します。 詳細については、「PREDICT T-SQL 関数を使用したネイティブ スコアリング」をご覧ください。

製品を選択する

次の行で、興味のある製品の名前を選択すると、その製品の情報のみが表示されます。

* SQL Managed Instance *  

* Azure Synapse
Analytics *
 

構文

PREDICT  
(  
  MODEL = @model | model_literal,  
  DATA = object AS <table_alias>
  [, RUNTIME = ONNX ]
)  
WITH ( <result_set_definition> )  

<result_set_definition> ::=  
  {  
    { column_name  
      data_type  
      [ COLLATE collation_name ]  
      [ NULL | NOT NULL ]  
    }  
      [,...n ]  
  }  

MODEL = @model | model_literal  
PREDICT  
(  
  MODEL = <model_object>,
  DATA = object AS <table_alias>
  [, RUNTIME = ONNX ]
)  
WITH ( <result_set_definition> )  

<result_set_definition> ::=  
  {  
    { column_name  
      data_type  
      [ COLLATE collation_name ]  
      [ NULL | NOT NULL ]  
    }  
      [,...n ]  
  }  

<model_object> ::=
  {
    model_literal
    | model_variable
    | ( scalar_subquery )
  }

引数

MODEL

MODEL パラメーターは、スコア付けまたは予測に使用するモデルを指定するために使用されます。 モデルは、変数、リテラル、またはスカラー式として指定されます。

PREDICTRevoScaleRrevoscalepy パッケージを使用してトレーニングされたモデルをサポートします。

MODEL パラメーターは、スコア付けまたは予測に使用するモデルを指定するために使用されます。 モデルは、変数、リテラル、またはスカラー式として指定されます。

Azure SQL Managed Instance では、PREDICTOpen Neural Network Exchange (ONNX) 形式のモデル、または revoscalepy および revoscalepy パッケージを使用してトレーニングされたモデルをサポートしています。

重要

PREDICT での ONNX のサポートは、Azure SQL Managed Instance ではプレビュー段階です。

MODEL パラメーターは、スコア付けまたは予測に使用するモデルを指定するために使用されます。 モデルは、変数、リテラル、スカラー式、またはスカラー サブクエリとして指定されます。

Azure Synapse Analytics では、PREDICTOpen Neural Network Exchange (ONNX) 形式のモデルをサポートしています。

データ

DATA パラメーターは、スコア付けまたは予測に使用するモデルを指定するために使用されます。 データは、クエリ内でテーブル ソースの形式で指定されます。 テーブル ソースには、テーブル、テーブルの別名、CTE の別名、ビュー、またはテーブル値関数のいずれかを指定できます。

RUNTIME = ONNX

重要

RUNTIME = ONNX 引数は、Azure SQL EdgeAzure Synapse Analytics でのみ使用可能で、Azure SQL Managed Instance ではプレビュー段階です。

モデルの実行に使用される機械学習エンジンを示します。 RUNTIME パラメーターの値は常に ONNX です。 Azure SQL Edge と Azure Synapse Analytics にはこのパラメーターが必須です。 Azure SQL Managed Instance (プレビュー段階) では、このパラメーターは省略可能で、ONNX モデルを使用する場合にのみ使用されます。

WITH ( <result_set_definition> )

WITH 句は、PREDICT 関数によって返される出力のスキーマを指定するのに使用されます。

PREDICT 関数自体から返される列に加え、データ入力の一部であるすべての列がクエリで使用できます。

戻り値

定義済みのスキーマは使用できません。モデルのコンテンツは検証されず、返された列の値も検証されません。

  • PREDICT 関数は入力として列を通過します。
  • PREDICT 関数では、新しい列も生成されますが、列の数とそのデータ型は、予測に使用されたモデルの種類に依存します。

データ、モデル、または列形式に関連するすべてのエラー メッセージは、モデルに関連付けられている基になる予測関数から返されます。

解説

PREDICT 関数は、SQL Server 2017 以降のすべてのエディションで、Windows および Linux 上でサポートされています。 PREDICT を使用するために、Machine Learning Services を有効にする必要はありません。

サポートされているアルゴリズム

使用するモデルは、RevoScaleR または revoscalepy パッケージからサポートされているアルゴリズムのいずれかを使用して作成されている必要があります。 現在サポートされているモデルの一覧については、PREDICT T-SQL 関数を使用したネイティブ スコアリングに関するページを参照してください。

ONNX モデル形式に変換できるアルゴリズムがサポートされています。

ONNX モデル形式、および RevoScaleR または revoscalepy パッケージからサポートされているアルゴリズムのいずれかを使用して作成したモデルに変換できるアルゴリズムがサポートされています。 RevoScaleR および revoscalepy で現在サポートされているアルゴリズムの一覧については、PREDICT T-SQL 関数を使用したネイティブ スコアリングに関するページを参照してください。

アクセス許可

PREDICT にはアクセス許可は必要ありませんが、ユーザーは、データベースに対する EXECUTE アクセス許可と、入力として使用される任意のデータをクエリするためのアクセス許可が必要です。 モデルがテーブルに格納されている場合、ユーザーはテーブルからモデルを読み込める必要もあります。

次の例は、PREDICT を呼び出す構文を示しています。

FROM 句で PREDICT を使用する

この例では、SELECT ステートメントの FROM 句内の PREDICT 関数を参照します。

SELECT d.*, p.Score
FROM PREDICT(MODEL = @model,
    DATA = dbo.mytable AS d) WITH (Score FLOAT) AS p;
DECLARE @model VARBINARY(max) = (SELECT test_model FROM scoring_model WHERE model_id = 1);

SELECT d.*, p.Score
FROM PREDICT(MODEL = @model,
    DATA = dbo.mytable AS d, RUNTIME = ONNX) WITH (Score FLOAT) AS p;

DATA パラメーターでテーブル ソースに指定された別名 d は、dbo.mytable に属する列を参照するために使用されます。 PREDICT 関数に指定された別名 p は、PREDICT 関数によって返される列を参照するために使用されます。

  • モデルは Models という名前のテーブルに varbinary(max) 列として格納されます。 モデルを識別するために、IDdescription などの追加情報がテーブルに保存されます。
  • DATA パラメーターでテーブル ソースに指定された別名 d は、dbo.mytable に属する列を参照するために使用されます。 入力データ列の名前は、モデルの入力名と一致している必要があります。
  • PREDICT 関数に指定された別名 p は、PREDICT 関数によって返される予測される列を参照するために使用されます。 列名は、モデルの出力名と同じ名前にする必要があります。
  • すべての入力データ列と予測される列は、SELECT ステートメントで表示できるようになります。

前の例のクエリは、スカラー サブクエリとして MODEL を指定することにより、ビューを作成するように書き換えることができます。

CREATE VIEW predictions
AS
SELECT d.*, p.Score
FROM PREDICT(MODEL = (SELECT test_model FROM scoring_model WHERE model_id = 1),
             DATA = dbo.mytable AS d, RUNTIME = ONNX) WITH (Score FLOAT) AS p;

PREDICT を INSERT ステートメントと結合する

予測の一般的なユース ケースは、入力データ用のスコアを生成してから、予測した値をテーブルに挿入する方法です。 次の例では、呼び出し元のアプリケーションがストアド プロシージャを使用して予測値を含む行をテーブルに挿入することを前提としています。

DECLARE @model VARBINARY(max) = (SELECT model FROM scoring_model WHERE model_name = 'ScoringModelV1');

INSERT INTO loan_applications (c1, c2, c3, c4, score)
SELECT d.c1, d.c2, d.c3, d.c4, p.score
FROM PREDICT(MODEL = @model, DATA = dbo.mytable AS d) WITH(score FLOAT) AS p;
DECLARE @model VARBINARY(max) = (SELECT model FROM scoring_model WHERE model_name = 'ScoringModelV1');

INSERT INTO loan_applications (c1, c2, c3, c4, score)
SELECT d.c1, d.c2, d.c3, d.c4, p.score
FROM PREDICT(MODEL = @model, DATA = dbo.mytable AS d, RUNTIME = ONNX) WITH(score FLOAT) AS p;
  • PREDICT の結果は、PredictionResults という名前のテーブルに格納されます。
  • モデルは Models という名前のテーブルに varbinary(max) 列として格納されます。 モデルを識別するために、ID や説明などの追加情報がテーブルに保存されます。
  • DATA パラメーターでテーブル ソースに指定された別名 d は、dbo.mytable に含まれる列を参照するために使用されます。 入力データ列の名前は、モデルの入力名と一致している必要があります。
  • PREDICT 関数に指定された別名 p は、PREDICT 関数によって返される予測される列を参照するために使用されます。 列名は、モデルの出力名と同じ名前にする必要があります。
  • すべての入力列と予測される列は、SELECT ステートメントで表示できるようになります。

次のステップ

関連する概念の詳細については、次の記事を参照してください。