次の方法で共有


PREDICT (Transact-SQL)

適用対象: SQL Server 2017 (14.x) 以降のバージョン Azure SQL Managed InstanceAzure Synapse Analytics

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

製品を選択する

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

PREDICT は Azure SQL Database では使用できません。

* SQL Server *  

* SQL Managed Instance *  

* Azure Synapse
解析学*
 

構文

PREDICT  
(  
  MODEL = @model | model_literal,  
  DATA = object AS <table_alias>
)  
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 では、 PREDICTRevoScaleR パッケージと revoscalepy パッケージを使用してトレーニングされたモデル サポートしています。

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

Azure Synapse Analytics では、PREDICTOpen Neural Network Exchange (ONNX) 形式のモデルをサポートしています。 詳細については、 ONNX を参照してください。

データ

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

RUNTIME = ONNX

モデルの実行に使用される機械学習エンジンを示します。 RUNTIME パラメーターの値は常に ONNX です。 Azure Synapse Analytics には、 RUNTIME パラメーターが必要です。 RUNTIME = ONNX引数は、Azure Synapse Analytics でのみ使用できます。

WITH ( <result_set_definition> )

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

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

戻り値

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

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

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

解説

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

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

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

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

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

アクセス許可

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

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

FROM 句で PREDICT を使用する

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

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 は、dbo.mytable に属する列を参照するために使用されます。 関数に指定された別名 PREDICT は、PREDICT 関数によって返される列を参照するために使用されます。

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

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