Declaración CREATE MODEL para modelos de solo transformación

En este documento, se describe la declaración CREATE MODEL para crear modelos de solo transformación en BigQuery. Los modelos solo de transformación usan la cláusula TRANSFORM para aplicar funciones de procesamiento previo a los datos de entrada y mostrar los datos procesados previamente. Los modelos solo de transformación separan el procesamiento previo de datos del entrenamiento de modelos, lo que facilita la captura y la reutilización de un conjunto de reglas de procesamiento previo de datos.

Puedes usar un modelo de solo transformación junto con la función ML.TRANSFORM para proporcionar datos procesados previamente a otros modelos:

  • Puedes usarlo en la declaración de consulta cuando creas otro modelo para usar los datos transformados como los datos de entrenamiento de ese modelo.
  • Puedes usarlo en el argumento query statement de la función ML.PREDICT para proporcionar datos para la predicción que se procesa de la manera que espera el modelo.

Para las transformaciones de atributos por lotes, es mejor usar modelos de solo transformación porque te permite procesar grandes cantidades de datos en un período breve. Para las transformaciones de atributos en línea, es mejor usar Vertex AI Feature Store porque proporciona respuestas con baja latencia.

También puedes usar un modelo de solo transformación con la función ML.FEATURE_INFO para mostrar información sobre las transformaciones de atributos en el modelo.

Para obtener información sobre las instrucciones y funciones de SQL compatibles para cada tipo de modelo, consulta Recorrido del usuario de extremo a extremo para cada modelo.

Sintaxis de CREATE MODEL

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL} model_name
TRANSFORM (select_list)
OPTIONS(MODEL_TYPE = 'TRANSFORM_ONLY')
AS query_statement

CREATE MODEL

Crea y entrena un modelo nuevo en el conjunto de datos especificado. Si el nombre del modelo existe, CREATE MODEL muestra un error.

CREATE MODEL IF NOT EXISTS

Crea y entrena un modelo nuevo solo si el modelo no existe en el conjunto de datos especificado.

CREATE OR REPLACE MODEL

Crea y entrena un modelo y reemplaza el existente con el mismo nombre en el conjunto de datos especificado.

model_name

El nombre del modelo que estás creando o reemplazando. El nombre del modelo debe ser único en el conjunto de datos: ningún otro modelo o tabla puede tener el mismo nombre. El nombre del modelo debe seguir las mismas reglas de denominación que una tabla de BigQuery. Estas son las características de un nombre de modelo:

  • Contiene hasta 1,024 caracteres
  • Contiene letras (mayúsculas o minúsculas), números o guiones bajos.

model_name no distingue entre mayúsculas y minúsculas.

Si no tienes un proyecto predeterminado configurado, debes anteponer el ID del proyecto al nombre del modelo en el siguiente formato, incluidos los acentos graves:

`[PROJECT_ID].[DATASET].[MODEL]`

Por ejemplo, “myproject.mydataset.mymodel”.

select_list

Puedes pasar columnas desde query_statement hasta el modelo de entrenamiento sin transformación con *, * EXCEPT() o mediante una lista de los nombres de columna directamente.

No es necesario que todas las columnas de query_statement aparezcan en la cláusula TRANSFORM, por lo que puedes eliminar las columnas que aparecen en query_statement omitiéndolas de la cláusula TRANSFORM.

Puedes transformar entradas desde query_statement mediante el uso de expresiones en select_list. select_list es similar a una declaración SELECT normal. select_list admite la siguiente sintaxis:

  • *
  • * EXCEPT()
  • * REPLACE()
  • expression
  • expression.*

Lo siguiente no puede aparecer dentro de select_list:

  • Funciones de agregación
  • Funciones analíticas que no son de BigQuery ML Para obtener más información sobre las funciones compatibles, consulta Procesamiento previo de atributos manuales.
  • UDF
  • Subconsultas
  • Columnas anónimas. Por ejemplo, se permite a + b as c, mientras que a + b no.

Las columnas de salida de select_list pueden ser de cualquier tipo de datos compatible con BigQuery.

Si están presentes, las siguientes columnas deben aparecer en select_list sin transformación:

  • label
  • data_split_col
  • kmeans_init_col
  • instance_weight_col

Si query_statement muestra estas columnas, debes hacer referencia a ellas en select_list por el nombre de la columna fuera de cualquier expresión o mediante *. No se pueden usar alias con estas columnas.

MODEL_TYPE

Sintaxis

MODEL_TYPE = 'TRANSFORM_ONLY'

Descripción

Especifica el tipo de modelo. Esta opción es obligatoria.

query_statement

La consulta de Google SQL que contiene los datos que se procesarán previamente. Las estadísticas que se calculan cuando se transforman estos datos se aplican a los datos de entrada de cualquier función con la que uses el modelo.

Ejemplos

En los siguientes ejemplos, se muestra cómo crear y usar modelos de solo transformación.

Ejemplo 1

En el siguiente ejemplo, se crea un modelo llamado mymodel en mydataset en el proyecto predeterminado. El modelo transforma varias columnas de la tabla pública de BigQuery bigquery-public-data.ml_datasets.penguins:

CREATE MODEL `mydataset.transform_model`
  TRANSFORM(
    species,
    island,
    ML.MAX_ABS_SCALER(culmen_length_mm) OVER () AS culmen_length_mm,
    ML.MAX_ABS_SCALER(culmen_depth_mm) OVER () AS culmen_depth_mm,
    ML.MAX_ABS_SCALER(flipper_length_mm) OVER () AS flipper_length_mm,
    sex,
    body_mass_g)
  OPTIONS (
    model_type = 'transform_only')
AS (
  SELECT *
  FROM `bigquery-public-data.ml_datasets.penguins`
);

Ejemplo 2

En el siguiente ejemplo, se crea un modelo llamado mymodel en mydataset en el proyecto predeterminado. El modelo se entrena en datos con procesamiento previo mediante un modelo de solo transformación:

CREATE MODEL `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE = 'LINEAR_REG',
    MAX_ITERATIONS = 5,
    INPUT_LABEL_COLS = ['body_mass_g'] ) AS
SELECT
  *
FROM
  ML.TRANSFORM(
    MODEL `mydataset.transform_model`,
    TABLE `bigquery-public-data.ml_datasets.penguins`)
WHERE body_mass_g IS NOT NULL;