共用方式為


預測 (Transact-SQL)

適用於:SQL Server 2017 (14.x) 和更新版本Azure SQL 受控執行個體AzureSynapse Analytics

根據預存模型產生預測值或分數。 如需詳細資訊,請參閱使用 PREDICT T-SQL 函式進行原生評分

選取產品

在以下資料列中,選取您感興趣的產品名稱,隨即只會顯示該產品的資訊。

備註

PREDICT 在 Azure SQL 資料庫中無法取得。

這很重要

PREDICT語法依產品而異。 使用產品選擇器查看適合您平台的正確語法。 特別是 Azure Synapse Analytics 需要這個 RUNTIME = ONNX 參數,但 SQL Server 或 Azure SQL Managed Instance 並未使用這個參數。

* SQL 伺服器 *  

* SQL 受控執行個體 *  

* 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 指定用於評分或預測的模型。 將模型指定為變數、文字或純量表達式。

PREDICT 支援使用 RevoScaleRrevoscalepy 套件進行定型的模型。

使用參數 MODEL 指定用於評分或預測的模型。 將模型指定為變數、文字或純量表達式。

在 Azure SQL 受控執行個體中, PREDICT 支援使用 RevoScaleRrevoscalepy 套件定型的模型。

使用參數 MODEL 指定用於評分或預測的模型。 將模型指定為變數、文字、純量表達式或純量子查詢。

在 Azure Synapse Analytics 中,PREDICT 支援具有 Open Neural Network Exchange (ONNX) \(英文\) 格式的模型。 如需詳細資訊,請參閱 ONNX

資料

DATA 參數指定用於評分或預測的資料。 在查詢中指定以表格來源形式的資料。 資料表來源可以是資料表、資料表別名、CTE 別名、檢視或資料表值函式。

運行時間 = ONNX

指出機器學習引擎是用於模型執行。 RUNTIME 參數值一律是 ONNX。 Azure Synapse Analytics 需要參數 RUNTIME 。 引 RUNTIME = ONNX 數僅適用於 Azure Synapse Analytics。

帶 ( result_set_definition <> )

使用 WITH 子句來指定函式回傳 PREDICT 的輸出結構。

除了 PREDICT 函數傳回的資料行本身,屬於資料輸入的所有資料行都可在查詢中使用。

傳回值

沒有預設的結構模式;模型內容沒有被驗證,回傳的欄位值也沒有被驗證。

  • PREDICT 函數會傳入資料行做為輸入。
  • PREDICT 函數也會產生新的欄位,但欄位數量及其資料型態取決於用於預測的模型類型。

與模型相關聯的基礎預測函數,會傳回與資料、模型或資料行格式相關的任何錯誤訊息。

備註

Windows 和 Linux 上所有版本的 SQL Server 2017 和更新版本都支援 PREDICT 函式。 機器學習服務不需要啟用即可使用PREDICT

支援的演算法

您使用的模型必須使用 RevoScaleRrevoscalepy 套件中其中一種支援的演算法建立。 如需目前所支援模型的清單,請參閱使用 PREDICT T-SQL 函式進行原生評分

支援可轉換為 ONNX \(英文\) 模型格式的演算法。

支援可轉換為 ONNX \(英文\) 模型格式的演算法,以及使用 RevoScaleRrevoscalepy 套件中其中一種支援的演算法所建立的模型。 如需 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指定的別名 d 指涉屬於 dbo.mytable的欄位。 函式指定的PREDICT別名 p 指涉函式回傳PREDICT的欄位。

  • 模型儲存為名為 的表格中的 Models 資料行。 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 資料行。 如識別碼和描述的其他資訊可以儲存在資料表中以識別模型。
  • 參數中DATA為資料表來源指定的別名d,參考了 中的dbo.mytable欄位。 輸入資料資料行應該要符合模型的輸入名稱。
  • 函數指定的PREDICT別名p指的是該函數回傳PREDICT的預測欄位。 資料行名稱應該要有和模型的輸出名稱相同的名稱。
  • 所有輸入直欄和預測直欄都可在陳述式中 SELECT 顯示。

在下列文章中深入了解相關概念: