

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# CREATE MODEL
<a name="r_CREATE_MODEL"></a>

**Topics**
+ [先决条件](#r_create_model_prereqs)
+ [所需的权限](#r_simple_create_model-privileges)
+ [成本控制](#r_create_model_cost)
+ [Full CREATE MODEL](#r_full_create_model)
+ [参数](#r_create_model_parameters)
+ [使用说明](r_create_model_usage_notes.md)
+ [使用案例](r_create_model_use_cases.md)

## 先决条件
<a name="r_create_model_prereqs"></a>

在使用 CREATE MODEL 语句之前，请完成 [用于使用 Amazon Redshift ML 的集群设置](getting-started-machine-learning.md#cluster-setup) 中的先决条件。下面简要概述了这些先决条件。
+ 使用 Amazon 管理控制台或 Amazon 命令行界面 (Amazon CLI) 创建 Amazon Redshift 集群。
+ 在创建集群时附加 Amazon Identity and Access Management (IAM) policy。
+ 要支持 Amazon Redshift 和 SageMaker AI 代入角色以便与其它服务交互，请向 IAM 角色添加相应的信任策略。

有关 IAM 角色、信任策略和其他先决条件的详细信息，请参阅[用于使用 Amazon Redshift ML 的集群设置](getting-started-machine-learning.md#cluster-setup)。

您可以在下面找到 CREATE MODEL 语句的不同使用案例。
+ [简单 CREATE MODEL](r_create_model_use_cases.md#r_simple_create_model)
+ [根据用户指导创建模型](r_create_model_use_cases.md#r_user_guidance_create_model)
+ [带有 AUTO OFF 的 CREATE XGBoost 模型](r_create_model_use_cases.md#r_auto_off_create_model)
+ [自带模型 (BYOM) – 本地推理](r_create_model_use_cases.md#r_byom_create_model)
+ [自带模型 (BYOM) – 远程推理](r_create_model_use_cases.md#r_byom_create_model_remote)
+ [带有 K-MANES 的 CREATE MODEL](r_create_model_use_cases.md#r_k-means_create_model)
+ [Full CREATE MODEL](#r_full_create_model)

## 所需的权限
<a name="r_simple_create_model-privileges"></a>

以下是 CREATE MODEL 所需的权限：
+ Superuser
+ 具有 CREATE MODEL 权限的用户
+ 具有 GRANT CREATE MODEL 权限的角色

## 成本控制
<a name="r_create_model_cost"></a>

 Amazon Redshift ML 使用现有集群资源创建预测模型，因此您无需支付额外费用。但是，如果您需要调整集群的大小或训练模型，则可能需要支付额外费用。Amazon Redshift ML 使用 Amazon SageMaker AI 来训练模型，这确实会产生额外的关联费用。可以通过多种方法控制额外成本，例如，限制训练可花费的最长时间，或限制用于训练模型的训练样本数量。有关更多信息，请参阅[使用 Amazon Redshift ML 的成本](https://docs.amazonaws.cn/redshift/latest/dg/cost.html)。

## Full CREATE MODEL
<a name="r_full_create_model"></a>

下面总结了完整的 CREATE MODEL 语法的基本选项。

### Full CREATE MODEL 语法
<a name="r_auto_off-create-model-synposis"></a>

以下是 CREATE MODEL 语句的完整语法。

**重要**  
使用 CREATE MODEL 语句创建模型时，请按照以下语法中关键词的顺序进行操作。

```
CREATE MODEL model_name
FROM { table_name | ( select_statement )  | 'job_name' }
[ TARGET column_name ]
FUNCTION function_name [ ( data_type [, ...] ) ] 
[ RETURNS data_type ] 
  -- supported only for BYOM
[ SAGEMAKER 'endpoint_name'[:'model_name']] 
  -- supported only for BYOM remote inference
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[ AUTO ON / OFF ]
  -- default is AUTO ON
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER | KMEANS | FORECAST } ]
  -- not required for non AUTO OFF case, default is the list of all supported types
  -- required for AUTO OFF
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
  -- not supported when AUTO OFF
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1_Macro' | 'AUC' |
             'reg:squarederror' | 'reg:squaredlogerror'| 'reg:logistic'|
             'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge',
             'multi:softmax' | 'RMSE' | 'WAPE' | 'MAPE' | 'MASE' | 'AverageWeightedQuantileLoss' ) ]
  -- for AUTO ON: first 5 are valid
  -- for AUTO OFF: 6-13 are valid
  -- for FORECAST: 14-18 are valid
[ PREPROCESSORS 'string' ]
  -- required for AUTO OFF, when it has to be 'none'
  -- optional for AUTO ON
[ HYPERPARAMETERS { DEFAULT | DEFAULT EXCEPT ( Key 'value' (,...) ) } ]
  -- support XGBoost hyperparameters, except OBJECTIVE
  -- required and only allowed for AUTO OFF
  -- default NUM_ROUND is 100
  -- NUM_CLASS is required if objective is multi:softmax (only possible for AUTO OFF)
 [ SETTINGS (
   S3_BUCKET 'amzn-s3-demo-bucket',  |
    -- required
  TAGS 'string', |
    -- optional
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional, defualt is on.
  MAX_CELLS integer, |
    -- optional, default is 1,000,000
  MAX_RUNTIME integer (, ...) |
    -- optional, default is 5400 (1.5 hours)
  HORIZON integer, |
    -- required if creating a forecast model
  FREQUENCY integer, |
    -- required if creating a forecast model
  PERCENTILES string, |
    -- optional if creating a forecast model
  MAX_BATCH_ROWS integer -- optional for BYOM remote inference
    ) ]
```

## 参数
<a name="r_create_model_parameters"></a>

model\_name  
模型的名称。schema 中的模型名称必须是唯一的。

FROM { *table\_name* \| ( *select\_query* ) \| *'job\_name'*}  
指定训练数据的 table\_name 或查询。它们可以是系统中的现有表，也可以是用括号（即 ()）括起来的兼容 Amazon RedShift 的 SELECT 查询。查询结果中必须至少有两列。

TARGET *column\_name*  
成为预测目标的列的名称。FROM 子句中必须存在该列。

FUNCTION *function\_name* ( *data\_type* [, ...] )  
要创建的函数的名称以及输入参数的数据类型。您可以提供数据库中架构的架构名称而不是函数名称。

RETURNS *data\_type*  
要从模型的函数返回的数据类型。返回的 `SUPER` 数据类型仅适用于具有远程推理的 BYOM。

SAGEMAKER *'endpoint\_name'*[:*'model\_name'*]  
Amazon SageMaker AI 端点的名称。如果端点名称指向多模型端点，请添加要使用的模型名称。端点必须与 Amazon Redshift 集群托管于同一 Amazon Web Services 区域。

IAM\_ROLE { default \| 'arn:aws:iam::<account-id>:role/<role-name>'}  
 使用默认关键字让 Amazon Redshift 使用 IAM 角色，该角色设置为默认值并在 CREATE MODEL 命令运行时与集群关联。或者，您可以指定 IAM 角色的 ARN 来使用该角色。

[ AUTO ON / OFF ]  
 打开或关闭预处理器、算法和超参数选择的 CREATE MODEL 自动发现。在创建预测模型时指定 On 表示使用 AutoPredictor，其中 Amazon Forecast 会将算法的最佳组合应用于数据集中的每个时间序列。

 *MODEL\_TYPE { XGBOOST \| MLP \| LINEAR\_LEARNER \| KMEANS \| FORECAST }*   
（可选）指定模型类型。您可以指定是否要训练特定模型类型的模型，如 XGBoost、多层感知机（MLP）、KMEANS 或线性学习器，这些都是 Amazon SageMaker AI Autopilot 支持的算法。如果未指定参数，则在训练期间搜索所有受支持的模型类型，以找到最佳模型。您还可以在 Redshift ML 中创建预测模型，以创建准确的时间序列预测。

 *PROBLEM\_TYPE ( REGRESSION \| BINARY\_CLASSIFICATION \| MULTICLASS\_CLASSIFICATION )*   
（可选）指定问题类型。如果您知道问题类型，您可以将 Amazon Redshift 限制为仅搜索该特定模型类型的最佳模型。如果未指定此参数，则会在训练期间根据您的数据发现问题类型。

OBJECTIVE ( 'MSE' \| 'Accuracy' \| 'F1' \| 'F1Macro' \| 'AUC' \| 'reg:squarederror' \| 'reg:squaredlogerror' \| 'reg:logistic' \| 'reg:pseudohubererror' \| 'reg:tweedie' \| 'binary:logistic' \| 'binary:hinge' \| 'multi:softmax' \| 'RMSE' \| 'WAPE' \| 'MAPE' \| 'MASE' \| 'AverageWeightedQuantileLoss' )  
（可选）指定用于测量机器学习系统预测质量的目标指标的名称。此指标在训练过程中进行了优化，以便从数据中为模型参数值提供最佳估计值。如果未明确指定指标，则默认行为是自动使用 MSE：用于回归，F1：用于二进制分类，精度：用于多类分类。有关目标的更多信息，请参阅《Amazon SageMaker AI API 参考》**中的 [AutoMLJobObjective](https://docs.amazonaws.cn//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) 以及 XGBOOST 文档中的 [Learning task parameters](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters)。值 RMSE、WAPE、MAPE、MASE 和 AverageWeightedQuantileLoss 仅适用于预测模型。有关更多信息，请参阅 [CreateAutoPredictor](https://docs.amazonaws.cn/forecast/latest/dg/API_CreateAutoPredictor.html#forecast-CreateAutoPredictor-request-OptimizationMetric) API 操作。

 *PREPROCESSORS 'string'*  
（可选）将预处理器的某些组合指定为某些列的集合。格式是 columnSet 的列表，以及要应用于每组列的适当转换。Amazon Redshift 将特定转换器列表中的所有转换器应用于相应 ColumnSet 中的所有列。例如，要将带有 Imputer 的 OneHotEncoder 应用于列 t1 和 t2，请使用下面的示例命令。  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
  {"ColumnSet": [
      "t1",
      "t2"
    ],
    "Transformers": [
      "OneHotEncoder",
      "Imputer"
    ]
  },
  {"ColumnSet": [
      "t3"
    ],
    "Transformers": [
      "OneHotEncoder"
    ]
  },
  {"ColumnSet": [
      "temp"
    ],
    "Transformers": [
      "Imputer",
      "NumericPassthrough"
    ]
  }
]'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket'
)
```

HYPERPARAMETERS { DEFAULT \| DEFAULT EXCEPT ( key ‘value’ (,..) ) }  
指定默认的 XGBoost 参数是被使用还是被用户指定的值覆盖。值必须用单引号引起来。以下是 XGBoost 的参数示例及其默认值。      
[See the AWS documentation website for more details](http://docs.amazonaws.cn/redshift/latest/dg/r_CREATE_MODEL.html)

SETTINGS ( S3\_BUCKET *'amzn-s3-demo-bucket'*, \| TAGS 'string', \| KMS\_KEY\_ID *'kms\_string' *, \| S3\_GARBAGE\_COLLECT on / off, \| MAX\_CELLS integer , \| MAX\_RUNTIME (,...) , \| HORIZON integer, \| FREQUENCY forecast\_frequency, \| PERCENTILES array of strings )  
S3\_BUCKET 子句指定用于存储中间结果的 Amazon S3 位置。  
（可选）TAGS 参数是以逗号分隔的键值对列表，可用于标记在 Amazon SageMaker AI 和 Amazon Forecast 中创建的资源。标签有助于组织资源和分配成本。键/值对中的值是可选的，因此您可以使用格式 `key=value` 或只是通过创建键来创建标签。有关 Amazon Redshift 中的标签的更多信息，请参阅[标记概述](https://docs.amazonaws.cn/redshift/latest/mgmt/amazon-redshift-tagging.html)。  
（可选）KMS\_KEY\_ID 指定 Amazon Redshift 是否将服务器端加密与 Amazon KMS 键结合使用来保护静态数据。传输中的数据由安全套接字层 (SSL) 保护。  
（可选）S3\_GARBAGE\_COLLECT { ON \| OFF } 指定 Amazon Redshift 是否对用于训练模型的生成数据集和模型执行垃圾回收。如果设置为 OFF，则用于训练模型的生成数据集和模型将保留在 Amazon S3 中，并可用于其他目的。如果设置为 ON，则 Amazon Redshift 会在训练完成后删除 Amazon S3 中的构件。默认为 ON。  
（可选）MAX\_CELLS 指定训练数据中的单元格的数量。此值是记录数（在训练查询或表中）乘以列数的乘积。默认值是 1000000。  
（可选）MAX\_RUNTIME 指定最长训练时间。根据数据集的大小，训练任务通常可以更早完成。这将指定训练所需的最长时间。默认值为 5400（90 分钟）。  
HORIZON 指定了预测模型可以返回的最大预测数。模型一旦经过训练，就无法更改此整数。如果训练预测模型，则此参数是必需的。  
FREQUENCY 指定了您希望预测以时间为单位的粒度。可用的选项为 `Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min`。如果训练预测模型，则此参数是必需的。  
（可选）PERCENTILES 是一个以逗号分隔的字符串，指定用于训练预测器的预测类型。预测类型可以是从 0.01 到 0.99 的分位数，增量为 0.01 或更高。您也可以使用均值指定均值预测。您最多可以指定五种预测类型。

 MAX\_BATCH\_ROWS *整数*   
（可选）Amazon Redshift 在单个批处理请求中为单个 SageMaker AI 调用发送的最大行数。只有具有远程推理功能的 BYOM 才支持此项。此参数的最小值为 1。最大值为 `INT_MAX`，即 2147483647。仅当输入和返回的数据类型均为 *SUPER* 时，才需要此参数。默认值为 `INT_MAX`，即 2147483647。