PREDICT (Transact-SQL)

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

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

選取產品

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

* SQL 受控執行個體 *  

* 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 支援使用 RevoScaleRrevoscalepy 套件進行定型的模型。

MODEL 參數用來指定用於計分或預測的模型。 模型指定為變數、常值或純量運算式。

在 Azure SQL 受控執行個體中,PREDICT 支援具有 Open Neural Network Exchange (ONNX) \(英文\) 格式的模型,或是使用 RevoScaleRrevoscalepy 套件進行定型的模型。

重要

在 Azure SQL 受控執行個體中,PREDICT 中的 ONNX 支援處於預覽狀態。

MODEL 參數用來指定用於計分或預測的模型。 此模型會指定為變數、常值、純量運算式或純量子查詢。

在 Azure Synapse Analytics 中,PREDICT 支援具有 Open Neural Network Exchange (ONNX) \(英文\) 格式的模型。

資料

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

RUNTIME = ONNX

重要

RUNTIME = ONNX 引數僅可在 Azure SQL EdgeAzure Synapse Analytics 中使用,而且在 Azure SQL 受控執行個體中處於預覽狀態。

指出機器學習引擎是用於模型執行。 RUNTIME 參數值一律是 ONNX。 該參數為 Azure SQL Edge 與 Azure Synapse Analytics 的必要項目。 在 Azure SQL 受控執行個體 (處於預覽狀態) 上,該參數為選擇性,而且只會在使用 ONNX 模型時使用。

WITH ( <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

此範例在 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 函式所傳回的資料行。

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

後續步驟

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