PREDICT (Transact-SQL)

适用于: SQL Server 2017 (14.x) 及更高版本 Azure SQL 数据库Azure 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 包训练的模型。

重要

PREDICT 中 ONNX 的支持在 Azure SQL 托管实例中以预览版提供。

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 函数返回的列。

  • 模型存储为 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 语句中。

后续步骤

通过以下文章详细了解相关概念: