

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

# 使用案例
<a name="r_create_model_use_cases"></a>

以下使用案例演示了如何使用 CREATE MODEL 来满足您的需求。

## 简单 CREATE MODEL
<a name="r_simple_create_model"></a>

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

### 简单的 CREATE MODEL 语法
<a name="r_simple-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_query ) }
TARGET column_name
FUNCTION prediction_function_name
IAM_ROLE { default }
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  [ MAX_CELLS integer ]
)
```

### 简单 CREATE MODEL 参数
<a name="r_simple-create-model-parameters"></a>

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

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

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

FUNCTION *prediction\_function\_name*   
一个值，它指定由 CREATE MODEL 生成并用于使用此模型进行预测的 Amazon Redshift 机器学习函数的名称。该函数在与模型对象相同的 schema 中创建，并且可以重载。  
Amazon Redshift 机器学习支持模型，例如用于回归和分类的 Xtreme Gradient Boosted 树 (XGBoost) 模型。

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

 *S3\_BUCKET *'amzn-s3-demo-bucket'**  
您之前创建的 Amazon S3 存储桶的名称，该存储桶用于在 Amazon Redshift 和 SageMaker AI 之间共享训练数据和构件。在卸载训练数据之前，Amazon Redshift 会在此桶中创建一个子文件夹。训练完成后，Amazon Redshift 会删除创建的子文件夹及其内容。

MAX\_CELLS 整数   
要从 FROM 子句中导出的最大单元格数。默认值为 1000000。  
单元格数量是训练数据中的行数（由 FROM 子句表或查询生成）乘以列数的乘积。如果训练数据中的单元格数大于 max\_cells 参数指定的单元格数，则 CREATE MODEL 会缩小 FROM 子句训练数据的取样，以减小 MAX\_CELLS 下面的训练集的大小。允许更大的训练数据集可以产生更高的精度，但也意味着模型需要更长的时间来训练并且成本更高。  
有关使用 Amazon Redshift 的成本的信息，请参阅[使用 Amazon Redshift ML 的成本](cost.md)。  
有关与各种单元格数量相关的成本免费试用详细信息，请参阅 [Amazon Redshift 定价](https://aws.amazon.com/redshift/pricing)。

## 根据用户指导创建模型
<a name="r_user_guidance_create_model"></a>

除了 [简单 CREATE MODEL](#r_simple_create_model) 中所述的选项之外，您还可以在下面找到 CREATE MODEL 选项的描述。

预设情况下，CREATE MODEL 会搜索特定数据集的预处理和模型的最佳组合。您可能需要对模型进行额外的控制或引入其他领域知识（例如问题类型或目标）。在客户流失情况下，如果结果“客户不活跃”很少，则 F1 目标通常优先于精度目标。由于高精度模型可能会始终预测“客户处于活动状态”，因此可以实现高精度，但商业价值却很少。有关 F1 目标的信息，请参阅《Amazon SageMaker AI API 参考》**中的 [AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html)。

然后，CREATE MODEL 将遵循您对目标等指定方面的建议。同时，CREATE MODEL 会自动发现最佳预处理器和最佳超参数。

### 使用用户指导语法创建模型
<a name="r_user_guidance-create-model-synposis"></a>

CREATE MODEL 在您可以指定的方面以及 Amazon Redshift 自动发现的方面提供了更大的灵活度。

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER} ]
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1Macro' | 'AUC') ]
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### 使用用户指导参数创建模型
<a name="r_user_guidance-create-model-parameters"></a>

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

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

OBJECTIVE ( 'MSE' \| 'Accuracy' \| 'F1' \| 'F1Macro' \| 'AUC')  
（可选）指定用于测量机器学习系统预测质量的目标指标的名称。此指标在训练过程中进行了优化，以便从数据中为模型参数值提供最佳估计值。如果未明确指定指标，则默认行为是自动使用 MSE：用于回归，F1：用于二进制分类，精度：用于多类分类。有关目标的更多信息，请参阅《Amazon SageMaker AI API 参考》**中的 [AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html)。

MAX\_CELLS 整数   
（可选）指定训练数据中的单元格的数量。此值是记录数（在训练查询或表中）乘以列数的乘积。默认值为 1000000。

MAX\_RUNTIME 整数   
（可选）指定最长训练时间。根据数据集的大小，训练任务通常可以更早完成。这将指定训练所需的最长时间。默认值为 5400（90 分钟）。

S3\_GARBAGE\_COLLECT \{ ON \| OFF \}  
（可选）指定 Amazon Redshift 是否对用于训练模型的生成数据集和模型执行垃圾回收。如果设置为 OFF，则用于训练模型的生成数据集和模型将保留在 Amazon S3 中，并可用于其他目的。如果设置为 ON，则 Amazon Redshift 会在训练完成后删除 Amazon S3 中的构件。默认为 ON。

KMS\_KEY\_ID 'kms\_key\_id'  
（可选）指定 Amazon Redshift 是否将服务器端加密与 AWS KMS 键结合使用来保护静态数据。传输中的数据由安全套接字层 (SSL) 保护。

 *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'
)
```

Amazon Redshift 支持以下转换器：
+ OneHotEncoder – 通常用于将离散值编码为具有一个非零值的二进制向量。该转换器适用于许多机器学习模型。
+ OrdinalEncoder – 将离散值编码为单个整数。该转换器适用于特定机器学习模型，如 MLP 和线性学习器。
+ NumericPassthrough – 将输入按原样传递到模型中。
+ Imputer – 填充缺少的值，而不是数字 (NaN) 值。
+ ImputerWithIndicator – 填充缺少值和 NaN 值。此转换器器还会创建一个指示器，指示是否有任何值缺失以及被填充。
+ Normalizer – 标准化值，这可以提高许多机器学习算法的性能。
+ DateTimeVectorizer – 创建向量嵌入，表示可在机器学习模型中使用的日期时间数据类型列。
+ PCA – 将数据投影到低维空间中，以减少功能数量，同时保留尽可能多的信息。
+ StandardScaler – 通过去除平均值并缩放至单位方差来标准化功能。
+ MinMax – 通过将每个功能缩放至给定范围来转换功能。

Amazon Redshift ML 存储经过训练的转换器，并将其作为预测查询的一部分自动应用。在从模型生成预测时，您不需要指定它们。

## 带有 AUTO OFF 的 CREATE XGBoost 模型
<a name="r_auto_off_create_model"></a>

AUTO OFF CREATE MODEL 的目标通常与默认的 CREATE MODEL 不同。

作为高级用户，在训练这些模型时便已经知道所需的模型类型和要使用的超参数，因此，可以使用带有 AUTO OFF 的 CREATE MODEL 关闭预处理器和超参数的 CREATE MODEL 自动发现。为此，您可以显式指定模型类型。XGBoost 目前是 AUTO 被设置为 OFF 时支持的唯一模型类型。您可以指定超参数。Amazon Redshift 对您指定的任何超参数使用默认值。

### 带有 AUTO OFF 语法的 CREATE XGBoost 模型
<a name="r_auto_off-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | (select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE { 'reg:squarederror' | 'reg:squaredlogerror' | 'reg:logistic' |
            'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge' |
            'multi:softmax' | 'rank:pairwise' | 'rank:ndcg' }
HYPERPARAMETERS DEFAULT EXCEPT (
    NUM_ROUND '10',
    ETA '0.2',
    NUM_CLASS '10',
    (, ...)
)
PREPROCESSORS 'none'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### 使用 AUTO OFF 参数创建 XGBoost 模型
<a name="r_auto_off-create-model-parameters"></a>

 *AUTO OFF*   
关闭预处理器、算法和超参数选择的 CREATE MODEL 自动发现。

MODEL\_TYPE XGBOOST  
指定使用 XGBOOST 来训练模型。

OBJECTIVE str  
指定算法识别的目标。Amazon Redshift 支持 reg:squarederror、reg:squaredlogerror、reg:logistic、reg:pseudohubererror、reg:tweedie、binary:logistic、binary:hinge、multi:softmax。有关这些目标的更多信息，请参阅 XGBoost 文档中的[学习任务参数](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters)。

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

以下示例为 XGBoost 准备数据。

```
DROP TABLE IF EXISTS abalone_xgb;

CREATE TABLE abalone_xgb (
length_val float,
diameter float,
height float,
whole_weight float,
shucked_weight float,
viscera_weight float,
shell_weight float,
rings int,
record_number int);

COPY abalone_xgb
FROM 's3://redshift-downloads/redshift-ml/abalone_xg/'
REGION 'us-east-1'
IAM_ROLE default
IGNOREHEADER 1 CSV;
```

以下示例创建具有指定高级选项的 XGBoost 模型，如 MODEL\_TYPE、OBJECTIVE 和 PREPROCESSORS。

```
DROP MODEL abalone_xgboost_multi_predict_age;

CREATE MODEL abalone_xgboost_multi_predict_age
FROM ( SELECT length_val,
              diameter,
              height,
              whole_weight,
              shucked_weight,
              viscera_weight,
              shell_weight,
              rings
   FROM abalone_xgb WHERE record_number < 2500 )
TARGET rings FUNCTION ml_fn_abalone_xgboost_multi_predict_age
IAM_ROLE default
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE 'multi:softmax'
PREPROCESSORS 'none'
HYPERPARAMETERS DEFAULT EXCEPT (NUM_ROUND '100', NUM_CLASS '30')
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

以下示例使用推断查询来预测记录编号大于 2500 的鱼的年龄。它使用从上述命令创建的函数 ml\_fn\_abalone\_xgboost\_multi\_predict\_age。

```
select ml_fn_abalone_xgboost_multi_predict_age(length_val,
                                                   diameter,
                                                   height,
                                                   whole_weight,
                                                   shucked_weight,
                                                   viscera_weight,
                                                   shell_weight)+1.5 as age
from abalone_xgb where record_number > 2500;
```

## 自带模型 (BYOM) – 本地推理
<a name="r_byom_create_model"></a>

Amazon Redshift ML 支持使用自带模型 (BYOM) 进行本地推理。

下面总结了 BYOM 的 CREATE MODEL 语法的选项。您可以将在 Amazon Redshift 之外训练的模型与 Amazon SageMaker AI 结合使用，以用于 Amazon Redshift 本地的数据库内推理。

### 用于本地推理的 CREATE MODEL 语法
<a name="r_local-create-model"></a>

下面介绍了用于本地推理的 CREATE MODEL 语法。

```
CREATE MODEL model_name
FROM ('job_name' | 's3_path' )
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
IAM_ROLE { default }
[ SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', | --required
  KMS_KEY_ID 'kms_string') --optional
];
```

Amazon Redshift 目前仅支持针对 BYOM 的预先训练的 XGBoost、MLP 和线性学习器模型。您可以使用此路径导入 SageMaker AI Autopilot 和直接在 Amazon SageMaker AI 中训练的模型，以便进行本地推理。

#### 用于本地推理的 CREATE MODEL 参数
<a name="r_local-create-model-parameters"></a>

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

FROM (*'job\_name'* \| *'s3\_path'* )  
*job\_name* 将 Amazon SageMaker AI 作业名称用作输入。作业名称可以是 Amazon SageMaker AI 训练作业名称，也可以是 Amazon SageMaker AI Autopilot 作业名称。任务必须在拥有 Amazon Redshift 集群的相同AWS账户中创建。要查找作业名称，请启动 Amazon SageMaker AI。在**训练**下拉菜单中，选择**训练作业**。  
*'s3\_path'* 指定创建模型时要使用的 .tar.gz 模型构件文件的 S3 位置。

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

RETURNS *data\_type*  
函数返回的值的数据类型。

IAM\_ROLE \{ default \| 'arn:aws:iam::<account-id>:role/<role-name>'\}  
 使用默认关键字让 Amazon Redshift 使用 IAM 角色，该角色设置为默认值并在 CREATE MODEL 命令运行时与集群关联。  
使用 IAM 角色的 Amazon 资源名称（ARN），您的集群使用该角色进行身份验证和授权。

SETTINGS ( S3\_BUCKET *'amzn-s3-demo-bucket'*, \| KMS\_KEY\_ID *'kms\_string'*)  
S3\_BUCKET 子句指定用于存储中间结果的 Amazon S3 位置。  
（可选）KMS\_KEY\_ID 子句指定 Amazon Redshift 是否将服务器端加密与 AWS KMS 键结合使用来保护静态数据。传输中的数据由安全套接字层 (SSL) 保护。  
有关更多信息，请参阅 [根据用户指导创建模型](#r_user_guidance_create_model)。

#### 用于本地推理的 CREATE MODEL 语法示例
<a name="r_local-create-model-example"></a>

以下示例创建之前在 Amazon Redshift 之外的 Amazon SageMaker AI 中训练过的模型。由于 Amazon Redshift ML 支持模型类型进行本地推理，因此以下 CREATE MODEL 将创建一个可在 Amazon Redshift 中本地使用的函数。您可以提供 SageMaker AI 训练作业名称。

```
CREATE MODEL customer_churn
FROM 'training-job-customer-churn-v4'
FUNCTION customer_churn_predict (varchar, int, float, float)
RETURNS int
IAM_ROLE default
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

创建模型后，您可以将函数 *customer\_churn\_predict* 与指定参数类型结合使用以进行预测。

## 自带模型 (BYOM) – 远程推理
<a name="r_byom_create_model_remote"></a>

Amazon Redshift ML 还支持使用自带模型 (BYOM) 进行远程推理。

下面总结了 BYOM 的 CREATE MODEL 语法的选项。

### 用于远程推理的 CREATE MODEL 语法
<a name="r_remote-create-model"></a>

下面介绍了用于远程推理的 CREATE MODEL 语法。

```
CREATE MODEL model_name 
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
SAGEMAKER 'endpoint_name'[:'model_name']
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[SETTINGS (MAX_BATCH_ROWS integer)];
```

#### 用于远程推理的 CREATE MODEL 参数
<a name="r_remote-create-model-parameters"></a>

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

FUNCTION *fn\_name* ( [*data\_type*] [, ...] )  
函数的名称和输入参数的数据类型。有关所有支持的数据类型，请参阅[数据类型](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)。`Geography`、`geometry` 和 `hllsketch` 不受支持。  
您还可以在架构中，使用两部分表示法提供函数名称，例如 `myschema.myfunction`。

RETURNS *data\_type*  
函数返回的值的数据类型。有关所有支持的数据类型，请参阅[数据类型](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)。`Geography`、`geometry` 和 `hllsketch` 不受支持。

SAGEMAKER *'endpoint\_name'*[:*'model\_name'*]   
Amazon SageMaker AI 端点的名称。如果端点名称指向多模型端点，请添加要使用的模型名称。端点必须与 Amazon Redshift 集群托管于同一 AWS 区域和 AWS 账户中。要查找端点，请启动 Amazon SageMaker AI。在**推理**下拉菜单中，选择**端点**。

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

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

当模型部署到 SageMaker AI 端点时，SageMaker AI 会在 Amazon Redshift 中创建模型的信息。然后它通过外部函数执行推理。您可以使用 SHOW MODEL 命令查看 Amazon Redshift 集群上的模型信息。

#### 用于远程推理的 CREATE MODEL 使用说明
<a name="r_remote-create-model-usage-notes"></a>

在使用 CREATE MODEL 进行远程推理之前，请考虑以下事项：
+ 端点必须由拥有 Amazon Redshift 集群的相同AWS账户中托管。
+ 确保 Amazon SageMaker AI 端点有足够的资源来容纳来自 Amazon Redshift 的推理调用，或者可以自动扩展 Amazon SageMaker AI 端点。
+ 如果您不使用 `SUPER` 数据类型作为输入，则模型仅接受逗号分隔值（CSV）格式的输入，该格式对应于 SageMaker AI 中的 `text/CSV` 内容类型。
+ 如果您不使用 `SUPER` 数据类型作为输入，则模型的输出为单个值，其类型是在创建函数时指定的类型。输出格式为逗号分隔值（CSV），通过 SageMaker AI 中的 `text/CSV` 内容类型实现。`VARCHAR` 数据类型不能包含在引号中，也不能包含换行，并且每个输出都必须位于新行中。
+ 模型接受 null 值作为空字符串。
+ 当输入数据类型为 `SUPER` 时，仅支持一个输入参数。
+ 当输入数据类型为 `SUPER` 时，返回的数据类型也必须是 `SUPER`。
+ 当输入和返回的数据类型均为 SUPER 时，需要使用 MAX\_BATCH\_ROWS。
+ 当输入数据类型为 `SUPER` 时，端点调用的内容类型为 `application/json`（MAX\_BATCH\_ROWS 为 `1` 时）或 `application/jsonlines`（所有其他情况）。
+ 当返回数据类型为 `SUPER` 时，端点调用接受的类型为 `application/json`（MAX\_BATCH\_ROWS 为 `1` 时）或 `application/jsonlines`（所有其他情况）。

##### 用于远程推理的 CREATE MODEL 语法示例
<a name="r_remote-create-model-example"></a>

以下示例创建一个使用 SageMaker AI 端点进行预测的模型。确保端点正在运行以进行预测，并在 CREATE MODEL 命令中指定其名称。

```
CREATE MODEL remote_customer_churn
FUNCTION remote_fn_customer_churn_predict (varchar, int, float, float)
RETURNS int
SAGEMAKER 'customer-churn-endpoint'
IAM_ROLE default;
```

 以下示例使用大型语言模型（LLM）创建具备远程推理的 BYOM。托管在 Amazon SageMaker AI Jumpstart 上的 LLM 接受并返回 `application/json` 内容类型，并支持每次调用一个 JSON。输入和返回的数据类型必须为 `SUPER`，且 MAX\_BATCH\_ROWS 必须设置为 1。

```
CREATE MODEL sample_super_data_model
FUNCTION sample_super_data_model_predict(super)
RETURNS super
SAGEMAKER 'sample_super_data_model_endpoint'
IAM_ROLE default
SETTINGS (MAX_BATCH_ROWS 1);
```

## 带有 K-MANES 的 CREATE MODEL
<a name="r_k-means_create_model"></a>

Amazon Redshift 支持 K-Means 算法，该算法可对未标记的数据进行分组。此算法可解决需要在数据中发现分组的集群问题。根据未分类数据的相似与不同之处进行分组和分区。

### 带有 K-MANS 语法的 CREATE MODEL
<a name="r_k-means-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
FUNCTION function_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS 'string'
HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional
  MAX_CELLS integer, |
    -- optional
  MAX_RUNTIME integer
    -- optional);
```

### 带有 K-MANES 参数的 CREATE MODEL
<a name="r_k-means-create-model-parameters"></a>

 *AUTO OFF*   
关闭预处理器、算法和超参数选择的 CREATE MODEL 自动发现。

MODEL\_TYPE KMEANS  
指定使用 KMEANS 来训练模型。

PREPROCESSORS 'string'  
将预处理器的某些组合指定为某些列的集合。格式是 columnSet 的列表，以及要应用于每组列的适当转换。Amazon Redshift 支持 3 个 K-Means 预处理器，即 StandardScaler、MinMax 和 NumericPassthrough。如果您不想对 K-Means 应用任何预处理，请明确选择 NumericPassthrough 作为转换器。有关支持的转换器的更多信息，请参阅[使用用户指导参数创建模型](#r_user_guidance-create-model-parameters)。  
K-Means 算法使用欧氏距离来计算相似度。对数据进行预处理可确保模型的功能保持在同等级别并生成可靠的结果。

HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )  
指定是否使用 K-Means 参数。使用 K-Means 算法，必须指定 `K` 参数。有关更多信息，请参阅《Amazon SageMaker AI 开发人员指南》**中的 [K-Means Hyperparameters](https://docs.aws.amazon.com/sagemaker/latest/dg/k-means-api-config.html)。

以下示例为 K-Means 准备数据。

```
CREATE MODEL customers_clusters
FROM customers
FUNCTION customers_cluster
IAM_ROLE default
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS '[
{
  "ColumnSet": [ "*" ],
  "Transformers": [ "NumericPassthrough" ]
}
]'
HYPERPARAMETERS DEFAULT EXCEPT ( K '5' )
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');

select customer_id, customers_cluster(...) from customers;
customer_id | customers_cluster
--------------------
12345            1
12346            2
12347            4
12348
```

## CREATE MODEL with Forecast
<a name="r_forecast_model"></a>

Redshift ML 中的预测模型使用 Amazon Forecast 来创建准确的时间序列预测。这样做可以让您使用一段时间内的历史数据来就未来的事件进行预测。Amazon Forecast 的常见使用案例包括：使用零售产品数据来决定如何为库存定价，使用制造数量数据来预测一件商品的订购量，以及使用 Web 流量数据来预测 Web 服务器可能收到多少流量。

 [Amazon Forecast 中的配额限制](https://docs.aws.amazon.com/forecast/latest/dg/limits.html)在 Amazon Redshift 预测模型中执行。例如，最大预测数为 100，但该数量是可调整的。删除预测模型不会自动删除 Amazon Forecast 中的关联资源。如果您删除 Redshift 集群，则所有关联模型也会一并删除。

请注意，预测模型目前仅在以下区域中可用：
+ 美国东部（俄亥俄州）(us-east-2)
+ 美国东部（弗吉尼亚北部）(us-east-1)
+ 美国西部（俄勒冈州）(us-west-2)
+ 亚太地区（孟买）(ap-south-1)
+ 亚太地区（首尔）(ap-northeast-2)
+ 亚太地区（新加坡）(ap-southeast-1)
+ 亚太地区（悉尼）(ap-southeast-2)
+ 亚太地区（东京）(ap-northeast-1)
+ 欧洲地区（法兰克福）(eu-central-1)
+ 欧洲地区（爱尔兰）(eu-west-1)

### CREATE MODEL with Forecast 语法
<a name="r_forecast_model-synopsis"></a>

```
CREATE [ OR REPLACE ] MODEL forecast_model_name 
FROM { table_name | ( select_query ) } 
TARGET column_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'} 
AUTO ON
MODEL_TYPE FORECAST
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  HORIZON integer,
  FREQUENCY forecast_frequency
  [PERCENTILES '0.1', '0.5', '0.9']
  )
```

### CREATE MODEL with Forecast 参数
<a name="r_forecast_model-parameters"></a>

 *forecast\_model\_name*   
模型的名称。模型名称必须唯一。

FROM \{ table\_name \| ( select\_query ) \}  
指定训练数据的 table\_name 或查询。这既可以是系统中的现有表，也可以是用括号括起来的兼容 Amazon RedShift 的 SELECT 查询。表或查询结果必须至少包含三列：(1) 一个指定时间序列名称的 varchar 列。每个数据集可以有多个时间序列；(2) 一个日期时间列；以及 (3) 要预测的目标列。此目标列必须为整数或浮点类型。如果您提供的数据集包含三列以上，Amazon Redshift 会假定所有其他列都是相关时间序列的一部分。请注意，相关时间序列必须为整数或浮点类型。有关相关时间序列的更多信息，请参阅[使用相关时间序列数据集](https://docs.aws.amazon.com/forecast/latest/dg/related-time-series-datasets.html)。

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

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

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

MODEL\_TYPE FORECAST  
指定使用 FORECAST 来训练模型。

S3\_BUCKET 'amzn-s3-demo-bucket'  
您之前创建的 Amazon Simple Storage Service 桶的名称，该桶用于在 Amazon Redshift 和 Amazon Forecast 之间共享训练数据和构件。在卸载训练数据之前，Amazon Redshift 会在此桶中创建一个子文件夹。训练完成后，Amazon Redshift 会删除创建的子文件夹及其内容。

HORIZON 整数  
预测模型可以返回的最大预测数。模型一旦经过训练，您就无法更改此整数。

FREQUENCY forecast\_frequency  
指定您希望的预测时间粒度。可用的选项为 `Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min`。如果要训练预测模型，则为必填项。

PERCENTILES 字符串  
一个以逗号分隔的字符串，指定用于训练预测器的预测类型。预测类型可以是从 0.01 到 0.99 的分位数，增量为 0.01 或更高。您也可以使用均值指定均值预测。您最多可以指定五种预测类型。

以下示例演示了如何创建简单的预测模型。

```
CREATE MODEL forecast_example
FROM forecast_electricity_
TARGET target 
IAM_ROLE 'arn:aws:iam::<account-id>:role/<role-name>'
AUTO ON 
MODEL_TYPE FORECAST
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket',
          HORIZON 24,
          FREQUENCY 'H',
          PERCENTILES '0.25,0.50,0.75,mean',
          S3_GARBAGE_COLLECT OFF);
```

创建预测模型后，您可以使用预测数据创建新表。

```
CREATE TABLE forecast_model_results as SELECT Forecast(forecast_example)
```

然后，您可以查询新表以获得预测。

```
SELECT * FROM forecast_model_results
```