PREDICT (Transact-SQL)
適用対象: SQL Server 2017 (14.x) 以降 Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics
格納されているモデルに基づいて予測値やスコアを生成します。 詳細については、「PREDICT T-SQL 関数を使用したネイティブ スコアリング」をご覧ください。
製品を選択する
次の行で、興味のある製品の名前を選択すると、その製品の情報のみが表示されます。
* SQL Server *
* SQL Database *
* 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
パラメーターは、スコア付けまたは予測に使用するモデルを指定するために使用されます。 モデルは、変数、リテラル、またはスカラー式として指定されます。
PREDICT
は RevoScaleR と revoscalepy パッケージを使用してトレーニングされたモデルをサポートします。
MODEL
パラメーターは、スコア付けまたは予測に使用するモデルを指定するために使用されます。 モデルは、変数、リテラル、またはスカラー式として指定されます。
Azure SQL Managed Instance では、PREDICT
は Open Neural Network Exchange (ONNX) 形式のモデル、または revoscalepy および revoscalepy パッケージを使用してトレーニングされたモデルをサポートしています。
重要
PREDICT
での ONNX のサポートは、Azure SQL Managed Instance ではプレビュー段階です。
MODEL
パラメーターは、スコア付けまたは予測に使用するモデルを指定するために使用されます。 モデルは、変数、リテラル、スカラー式、またはスカラー サブクエリとして指定されます。
Azure Synapse Analytics では、PREDICT
は Open Neural Network Exchange (ONNX) 形式のモデルをサポートしています。
データ
DATA パラメーターは、スコア付けまたは予測に使用するモデルを指定するために使用されます。 データは、クエリ内でテーブル ソースの形式で指定されます。 テーブル ソースには、テーブル、テーブルの別名、CTE の別名、ビュー、またはテーブル値関数のいずれかを指定できます。
RUNTIME = ONNX
重要
RUNTIME = ONNX
引数は、Azure SQL Edge と Azure 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)
列として格納されます。 モデルを識別するために、ID
やdescription
などの追加情報がテーブルに保存されます。 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 ステートメントで表示できるようになります。
次のステップ
関連する概念の詳細については、次の記事を参照してください。