PREDICT (Transact-SQL)

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Genera un valor de predicción o puntuaciones basadas en un modelo almacenado. Para obtener más información, vea Puntuación nativa mediante la función PREDICT de T-SQL.

Selección de un producto

En la fila siguiente, seleccione el nombre del producto que le interese; de esta manera, solo se mostrará la información de ese producto.

* SQL Managed Instance *  

* Azure Synapse
Analytics *
 

Sintaxis

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 )
  }

Argumentos

MODEL

El parámetro MODEL se usa para especificar el modelo que se usa para la puntuación o predicción. El modelo se especifica como una variable o un literal, o bien una expresión escalar.

PREDICT admite modelos entrenados mediante los paquetes RevoScaleR y revoscalepy.

El parámetro MODEL se usa para especificar el modelo que se usa para la puntuación o predicción. El modelo se especifica como una variable o un literal, o bien una expresión escalar.

En Azure SQL Managed Instance, PREDICT admite modelos en formato Open Neural Network Exchange (ONNX) o entrenados con los paquetes RevoScaleR y revoscalepy.

Importante

La compatibilidad con ONNX en PREDICT está en versión preliminar en Azure SQL Managed Instance.

El parámetro MODEL se usa para especificar el modelo que se usa para la puntuación o predicción. El modelo se especifica como una variable o un literal, o bien una expresión escalar o una subconsulta escalar.

En Azure Synapse Analytics, PREDICT admite modelos en formato Open Neural Network Exchange (ONNX).

DATOS

El parámetro DATA se usa para especificar los datos que se usan para la puntuación o predicción. Los datos se especifican en forma de un origen de tabla en la consulta. El origen de tabla puede ser una tabla, un alias de tabla, alias de CTE, vista o función con valores de tabla.

RUNTIME = ONNX

Importante

El argumento RUNTIME = ONNX solo está disponible en Azure SQL Edge y Azure Synapse Analytics, y está en versión preliminar en Azure SQL Managed Instance.

Indica el motor de aprendizaje automático que se usa para la ejecución del modelo. El valor del parámetro RUNTIME siempre es ONNX. El parámetro es necesario para Azure SQL Edge y Azure Synapse Analytics. En Azure SQL Managed Instance (en versión preliminar), el parámetro es opcional y solo se usa cuando se utilizan modelos ONNX.

WITH ( <definición_de_conjunto_de_resultados> )

La cláusula WITH se usa para especificar el esquema de la salida devuelta por la función PREDICT.

Además de las columnas devueltas por la propia función PREDICT, todas las columnas que forman parte de los datos de entrada están disponibles para su uso en la consulta.

Valores devueltos

No hay ningún esquema predefinido disponible; el contenido del modelo no se valida ni tampoco los valores de columna devueltos.

  • La función PREDICT se pasa a través de las columnas como entrada.
  • La función PREDICT también genera columnas nuevas, pero el número de columnas y sus tipos de datos dependen del tipo de modelo que se usó para la predicción.

Los mensajes de error relacionados con los datos, el modelo o el formato de columna se devuelven mediante la función de predicción subyacente asociada con el modelo.

Observaciones

La función PREDICT se admite en todas las ediciones de SQL Server 2017 o posteriores, en Windows y Linux. No es necesario habilitar Machine Learning Services para usar PREDICT.

Algoritmos admitidos

El modelo que se use se debe haber creado mediante uno de los algoritmos admitidos de los paquetes RevoScaleR o revoscalepy. Para obtener una lista de los modelos admitidos actualmente, vea Puntuación nativa mediante la función PREDICT de T-SQL.

Se admiten los algoritmos que se pueden convertir al formato de modelo ONNX.

Se admiten los algoritmos que se pueden convertir al formato de modelo ONNX y a los modelos que se hayan creado mediante uno de los algoritmos admitidos de los paquetes RevoScaleR o revoscalepy. Para obtener una lista de los modelos admitidos actualmente en RevoScaleR y revoscalepy, vea Puntuación nativa mediante la función PREDICT de T-SQL.

Permisos

No se requieren permisos para PREDICT; pero los usuarios necesitan el permiso EXECUTE en la base de datos y permiso para consultar los datos que se usan como entradas. Los usuarios también deben poder leer el modelo desde una tabla, si el modelo se ha almacenado en una tabla.

Ejemplos

En los ejemplos siguientes se describe la sintaxis para llamar a PREDICT.

Uso de PREDICT en una cláusula FROM

Este ejemplo se hace referencia a la función PREDICT en la cláusula FROM de una instrucción 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;

El alias d especificado para el origen de tabla en el parámetro DATA se usa para hacer referencia a las columnas que pertenecen a dbo.mytable. El alias p especificado para la función PREDICT se usa para hacer referencia a las columnas devueltas por la función PREDICT.

  • El modelo se almacena como la columna varbinary(max) en la tabla Models. En la tabla se guarda información adicional como el ID y la description para identificar el modelo.
  • El alias d especificado para el origen de tabla en el parámetro DATA se usa para hacer referencia a las columnas que pertenecen a dbo.mytable. Los nombres de las columnas de datos de entrada deben coincidir con el nombre de las entradas del modelo.
  • El alias p especificado para la función PREDICT se usa para hacer referencia a la columna predicha devuelta por la función PREDICT. El nombre de la columna debe ser el mismo que el nombre de salida del modelo.
  • Todas las columnas de datos de entrada y las columnas de predicción están disponibles para mostrarse en la instrucción SELECT.

La consulta de ejemplo anterior se puede volver a escribir para crear una vista; para ello, hay que especificar MODEL como una subconsulta escalar:

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;

Combinación de PREDICT con una instrucción INSERT

Un caso de uso común para la predicción consiste en generar una puntuación para los datos de entrada y después insertar los valores de predicción en una tabla. En el ejemplo siguiente se da por supuesto que la aplicación que realiza la llamada usa un procedimiento almacenado para insertar una fila que contiene el valor de predicción en una tabla:

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;
  • Los resultados de PREDICT se almacenan en una tabla denominada PredictionResults.
  • El modelo se almacena como la columna varbinary(max) en la tabla Models. En la tabla se puede guardar información adicional como el id. y la descripción para identificar el modelo.
  • El alias d especificado para el origen de tabla en el parámetro DATA se usa para hacer referencia a las columnas de dbo.mytable. Los nombres de las columnas de datos de entrada deben coincidir con el nombre de las entradas del modelo.
  • El alias p especificado para la función PREDICT se usa para hacer referencia a la columna predicha devuelta por la función PREDICT. El nombre de la columna debe ser el mismo que el nombre de salida del modelo.
  • Todas las columnas de entrada y la columna de predicción están disponibles para mostrarse en la instrucción SELECT.

Pasos siguientes

Obtenga más información sobre los conceptos relacionados en los artículos siguientes: