用于仅限转换的模型的 CREATE MODEL 语句

本文档介绍了用于在 BigQuery 中创建仅限转换的模型的 CREATE MODEL 语句。仅限转换的模型使用 TRANSFORM 子句对输入数据应用预处理函数并返回预处理的数据。仅限转换的模型将数据预处理与模型训练分离,使您可以更轻松地捕获和重复使用一组数据预处理规则。

您可以将仅限转换的模型与 ML.TRANSFORM 函数结合使用,以向其他模型提供预处理的数据:

  • 您可以在创建另一个模型时在查询语句中使用它,以便将转换后的数据用作该模型的训练数据。
  • 您可以在 ML.PREDICT 函数的 query statement 参数中使用它,以便提供以目标模型期望的方式处理的数据来进行预测。

对于批量特征转换,最好使用仅限转换的模型,因为它使您可以在短时间内处理大量数据。对于在线特征转换,最好使用 Vertex AI Feature Store,因为它可提供低延迟响应。

您还可以将仅限转换的模型与 ML.FEATURE_INFO 函数搭配使用,以便返回有关模型中特征转换的信息。

如需了解每种模型类型支持的 SQL 语句和函数,请参阅每个模型的端到端用户体验历程

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

在指定的数据集中创建和训练新模型。如果模型名称存在,则 CREATE MODEL 会返回错误。

CREATE MODEL IF NOT EXISTS

仅当指定的数据集中不存在指定的新模型时才会创建和训练此模型。

CREATE OR REPLACE MODEL

在指定的数据集中创建和训练模型,并替换具有相同名称的现有模型。

model_name

所创建或替换的模型的名称。模型名称在数据集中必须具备唯一性:其他模型或表不得使用同一名称。模型名称必须遵循与 BigQuery 表格相同的命名规则。模型名称的要求如下:

  • 最多可以包含 1024 个字符
  • 包含字母(大写或小写)、数字和下划线

model_name 不区分大小写。

如果您未配置默认项目,则必须按以下格式(包括反引号)将项目 ID 附加到模型名称前面:

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

例如 `myproject.mydataset.mymodel`。

select_list

通过使用 ** EXCEPT() 或直接列出列名称,您无需转换即可将列从 query_statement 传递到模型训练。

并非 query_statement 中的所有列都必须在 TRANSFORM 子句中显示,因此您可以通过从 TRANSFORM 子句中删除 query_statement 中显示的列来将其丢弃。

您可以在 select_list 中使用表达式,对 query_statement 的输入进行转换。select_list 与一般的 SELECT 语句类似。select_list 支持以下语法:

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

以下内容无法在 select_list 中显示:

  • 聚合函数。
  • 非 BigQuery 机器学习分析函数。如需详细了解支持的函数,请参阅手动特征预处理
  • UDF。
  • 子查询。
  • 匿名列。例如,允许使用 a + b as c,而不允许使用 a + b

select_list 的输出列可以是 BigQuery 支持的任何数据类型。

如果存在,则以下列必须出现在 select_list 中而不进行转换:

  • label
  • data_split_col
  • kmeans_init_col
  • instance_weight_col

如果这些列由 query_statement 返回,则您必须在任何表达式之外在 select_list 中按列名称引用这些列,或者使用 *。不能为这些列使用别名。

MODEL_TYPE

语法

MODEL_TYPE = 'TRANSFORM_ONLY'

说明

指定模型类型。必须提供此选项。

query_statement

包含要预处理的数据的 GoogleSQL 查询。转换此数据时计算的统计信息会应用于与模型结合使用的任何函数的输入数据。

示例

以下示例展示了如何创建和使用仅限转换的模型。

示例 1

以下示例在默认项目的 mydataset 中创建名为 mymodel 的模型。该模型对 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`
);

示例 2

以下示例在默认项目的 mydataset 中创建名为 mymodel 的模型。该模型是基于使用仅限转换的模型预处理的数据进行训练的:

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;