用于仅限转换的模型的 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;