

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

**Topics**
+ [先決條件](#r_create_model_prereqs)
+ [所需權限](#r_simple_create_model-privileges)
+ [成本控制](#r_create_model_cost)
+ [完整的 CREATE MODEL](#r_full_create_model)
+ [Parameters](#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) 中的先決條件。以下是先決條件的概要。
+ 使用 AWS 管理主控台或命令列界面 (AWS CLI) 建立 AWS Amazon Redshift 叢集。
+ 在建立叢集時連接 AWS Identity and Access Management (IAM) 政策。
+ 若要允許 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)
+ [CREATE MODEL 和使用者指引](r_create_model_use_cases.md#r_user_guidance_create_model)
+ [CREATE XGBoost 模型與 AUTO OFF](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)
+ [CREATE MODEL 與 K-MEANS](r_create_model_use_cases.md#r_k-means_create_model)
+ [完整的 CREATE MODEL](#r_full_create_model)

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

以下是 CREATE MODEL 所需的權限：
+ 超級使用者
+ 具有 CREATE MODEL 權限的使用者
+ 具有 GRANT CREATE MODEL 權限的角色

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

 Amazon Redshift ML 會使用現有的叢集資源建立預測模型，因此您不必支付額外費用。但是，如果您需要調整叢集大小或想要訓練模型，則可能會產生額外費用。Amazon Redshift ML 會使用 Amazon SageMaker AI 來訓練模型，這確實會產生額外的相關費用。有一些方法可以控制額外成本，例如限制訓練所耗用的時間上限，或限制用於訓練模型的訓練範例數量。如需詳細資訊，請參閱[使用 Amazon Redshift 資料 API](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)。

## 完整的 CREATE MODEL
<a name="r_full_create_model"></a>

以下概述完整 CREATE MODEL 語法的基本選項。

### 完整的 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
    ) ]
```

## Parameters
<a name="r_create_model_parameters"></a>

model\$1name  
模型的名稱。結構描述中的模型名稱必須是唯一的。

FROM \$1 *table\$1name* \$1 ( *select\$1query* ) \$1 *'job\$1name'*\$1  
指定訓練資料的 table\$1name 或查詢。這可以是系統中現有的資料表，也可以是與 Amazon RedShift 相容的 SELECT 查詢，並以括號括住，也就是 ()。查詢結果中至少必須有兩個資料列。

TARGET *column\$1name*  
成為預測目標的資料欄名稱。該資料欄必須存在於 FROM 子句中。

FUNCTION *function\$1name* ( *data\$1type* [, ...] )  
要建立的函數名稱和輸入引數的資料類型。您可以提供資料庫中結構描述的結構描述名稱，而非函式名稱。

RETURNS *data\$1type*  
從模型的函式傳回的資料類型。傳回的 `SUPER` 資料類型僅適用於具有遠端推論的 BYOM。

SAGEMAKER *'endpoint\$1name'*[:*'model\$1name'*]  
Amazon SageMaker AI 端點的名稱。如果端點名稱指向多模型端點，請新增要使用的模型名稱。端點必須託管在與 Amazon Redshift 叢集 AWS 區域 相同的 中。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>'\$1  
 使用預設關鍵字，讓 Amazon Redshift 使用設定為預設並在執行 CREATE MODEL 命令時與叢集關聯的 IAM 角色。或者，您可以指定 IAM 角色的 ARN 以使用該角色。

[ AUTO ON / OFF ]  
 開啟或關閉預處理器、演算法和超參數選擇的 CREATE MODEL 自動探索。在建立預測模型時指定開啟，以使用 AutoPredictor，其中 Amazon Forecast 會將最佳演算法組合套用至資料集中的每個時間序列。

 *MODEL\$1TYPE \$1 XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER \$1 KMEANS \$1 FORECAST \$1*   
(選擇性) 指定模型類型。您可以指定是否要訓練特定模型類型的模型，例如 XGBoost、多層感知器 (MLP)、KMEANS 或線性學習程式，這些都是 Amazon SageMaker AI Autopilot 支援的演算法。如果未指定參數，則會在訓練期間搜尋所有支援的模型類型，以取得最佳模型。您也可以在 Redshift ML 中建立預測模型，以建立準確的時間序列預測。

 *PROBLEM\$1TYPE ( REGRESSION \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION )*   
(選擇性) 指定問題類型。如果您知道問題類型，則可以將 Amazon Redshift 限制為僅搜尋該特定模型類型的最佳模型。如果未指定此參數，則訓練期間會根據您的資料探索問題類型。

OBJECTIVE ( 'MSE' \$1 'Accuracy' \$1 'F1' \$1 'F1Macro' \$1 'AUC' \$1 'reg:squarederror' \$1 'reg:squaredlogerror' \$1 'reg:logistic' \$1 'reg:pseudohubererror' \$1 'reg:tweedie' \$1 'binary:logistic' \$1 'binary:hinge' \$1 'multi:softmax' \$1 'RMSE' \$1 'WAPE' \$1 'MAPE' \$1 'MASE' \$1 'AverageWeightedQuantileLoss' )  
(選擇性) 指定用來測量機器學習系統預測品質的目標指標名稱。此指標會在訓練期間進行最佳化，從資料中提供模型參數值的最佳估計值。如果您沒有明確指定指標，則預設行為是自動將 MSE: 用於迴歸、將 F1: 用於二進制分類、將 Accuracy: 用於多類別分類。如需目標的相關資訊，請參閱 *Amazon SageMaker AI API 參考*中的 [AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) 和 XGBOOST 文件中的[學習任務參數](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters)。RMSE、WAPE、MAPE、MASE 和 AverageWeightedQuantileLoss 僅適用於預測模型。如需詳細資訊，請參閱 [CreateAutoPredictor](https://docs.aws.amazon.com/forecast/latest/dg/API_CreateAutoPredictor.html#forecast-CreateAutoPredictor-request-OptimizationMetric) API 操作。

 *PREPROCESSORS 'string' *   
(選擇性) 指定特定資料欄集的特定預處理器組合。格式會是 columnSets 清單，以及要套用到每一組資料欄的適當轉換。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 \$1 DEFAULT \$1 DEFAULT EXCEPT ( key ‘value’ (,..) ) \$1  
指定使用預設的 XGBoost 參數或以使用者指定的值覆寫。這些值必須用單引號括住。以下是 XGBoost 及其預設值的參數範例。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/dg/r_CREATE_MODEL.html)

SETTINGS ( S3\$1BUCKET *'amzn-s3-demo-bucket'*, \$1 TAGS 'string', \$1 KMS\$1KEY\$1ID *'kms\$1string' *, \$1 S3\$1GARBAGE\$1COLLECT on / off, \$1 MAX\$1CELLS integer , \$1 MAX\$1RUNTIME (,...) , \$1 HORIZON integer, \$1 FREQUENCY forecast\$1frequency, \$1 PERCENTILES array of strings )  
S3\$1BUCKET 子句會指定用來儲存中繼結果的 Amazon S3 位置。  
(選用) TAGS 參數是以逗號分隔的索引鍵值配對清單，可用來標記在 Amazon SageMaker AI 中建立的資源和 Amazon Forecast。標籤可協助您整理資源和配置成本。配對中的值是可選的，因此您可以使用 `key=value` 格式或直接建立索引鍵來建立標籤。如需 Amazon Redshift 中標籤的相關資訊，請參閱[標記概觀](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-tagging.html)。  
（選用） KMS\$1KEY\$1ID 指定 Amazon Redshift 是否使用伺服器端加密搭配 AWS KMS 金鑰來保護靜態資料。傳輸中的資料會受到 Secure Sockets Layer (SSL) 保護。  
(選擇性) S3\$1GARBAGE\$1COLLECT \$1 ON \$1 OFF \$1 會指定 Amazon Redshift 是否對用於訓練模型的結果資料集和模型執行垃圾回收。如果設定為 OFF，用於訓練模型的結果資料集和模型會保留在 Amazon S3 中，並可用於其他用途。如果設定為 ON，Amazon Redshift 會在訓練完成後刪除 Amazon S3 中的成品。預設值為 ON。  
(選擇性) MAX\$1CELLS 會指定訓練資料中的儲存格數目。此值是記錄數目 (訓練查詢或資料表中) 乘以欄數的乘積。預設值為 1,000,000。  
(選擇性) MAX\$1RUNTIME 會指定訓練的時間上限。視資料集大小而定，訓練工作通常會更快完成。這會指定訓練應耗用的時間上限。預設值為 5,400 (90 分鐘)。  
HORIZON 會指定預測模型可傳回的預測數量上限。模型一經過訓練，就無法再變更此整數。如果訓練預測模型，則需要此參數。  
FREQUENCY 會指定您希望預測使用多細微的時間單位。可用選項為 `Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min`。如果訓練預測模型，則需要此參數。  
(選擇性) PERCENTILES 是逗號分隔的字串，可指定用來訓練預測器的預測類型。預測類型可以是 0.01 到 0.99 之間的分位數，增量單位為 0.01 或更高。您也可以使用平均值指定平均預測。您最多可以指定五種預測類型。

 MAX\$1BATCH\$1ROWS *integer*   
(選用) Amazon Redshift 在單一批次請求中針對單一 SageMaker AI 調用傳送的列數上限。只有具有遠端推論的 BYOM 才支援。此參數的最小值為 1。最大值為 `INT_MAX`，或 2,147,483,647。只有在輸入和傳回的資料類型皆為 *SUPER* 時，才需要此參數。預設值為 `INT_MAX`，或 2,147,483,647。

# 使用須知
<a name="r_create_model_usage_notes"></a>

使用 CREATE MODEL 時，請考量下列事項。
+ CREATE MODEL 陳述式會以非同步模式運作，並在將訓練資料匯出至 Amazon S3 時傳回。Amazon SageMaker AI 中的其餘訓練步驟會在背景中進行。訓練正在進行中時，對應的推論函數會顯示，但無法執行。您可以查詢 [STV\$1ML\$1MODEL\$1INFO](r_STV_ML_MODEL_INFO.md) 以查看訓練狀態。
+ 根據預設，在自動模式中，訓練最多可在背景執行 90 分鐘，而且可以延長。若要取消訓練，只要執行 [DROP MODEL](r_DROP_MODEL.md) 命令即可。
+ 您用來建立模型的 Amazon Redshift 叢集，以及用來暫存訓練資料和模型成品的 Amazon S3 儲存貯體必須位於相同 AWS 區域。
+ 在模型訓練期間，Amazon Redshift 和 SageMaker AI 會將中繼成品儲存在您提供的 Amazon S3 儲存貯體中。根據預設，Amazon Redshift 會在 CREATE MODEL 操作結束時執行垃圾回收。Amazon Redshift 會從 Amazon S3 中移除這些物件。若要將這些成品保留在 Amazon S3 上，請設定 S3\$1GARBAGE COLLECT OFF 選項。
+ 您必須在 FROM 子句中提供的訓練資料中使用至少 500 個資料列。
+ 使用 CREATE MODEL 陳述式時，您最多只能在 FROM \$1 table\$1name \$1 ( select\$1query ) \$1 子句中指定 256 個特徵 (輸入) 資料欄。
+ 若是 AUTO ON，您可以用來做為訓練集的資料欄類型為 SMALLINT、INTEGER、BIGINT、DECIMAL、REAL、DOUBLE、BOOLEAN、CHAR、VARCHAR、DATE、TIME、TIMETZ、TIMESTAMP 和 TIMESTAMPTZ。若是 AUTO OFF，您可以用來做為訓練集的資料欄類型為 SMALLINT、INTEGER、BIGINT、DECIMAL、REAL、DOUBLE 和 BOOLEAN。
+ 您不能使用 DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、TIMESTAMPTZ、GEOMETRY、GEOGRAPHY、HLLSKETCH、SUPER 或 VARBYTE 做為目標資料欄類型。
+ 若要改善模型精確度，請執行下列其中一項操作：
  + 當您在 FROM 子句中指定訓練資料時，在 CREATE MODEL 命令中盡可能多新增相關資料欄。
  + 使用較大的值做為 MAX\$1RUNTIME 和 MAX\$1CELLS。此參數的值越大，訓練模型的成本也會增加。
+ 只要計算訓練資料並將其匯出至 Amazon S3 儲存貯體，就會立即傳回 CREATE MODEL 陳述式執行。在此之後，您可以使用 SHOW MODEL 命令檢查訓練的狀態。在背景訓練的模型失敗時，您可以使用 SHOW MODEL 來檢查錯誤。您無法重試失敗的模型。使用 DROP MODEL 可移除失敗的模型並重新建立新模型。如需 SHOW MODEL 的相關資訊，請參閱 [SHOW MODEL](r_SHOW_MODEL.md)。
+ 本機 BYOM 支援 Amazon Redshift ML 在非 BYOM 案例中支援的同類型模型。Amazon Redshift 支援一般 XGBoost (使用 XGBoost 1.0 版或更新版本)、不含預處理器的 KMEANS 模型，以及由 Amazon SageMaker AI Autopilot 訓練的 XGBOOST/MLP/線性學習程式模型。後者可在 Autopilot 指定的預處理器也受到 Amazon SageMaker AI Neo 支援時受到支援。
+ 如果您的 Amazon Redshift 叢集已為您的虛擬私有雲端 (VPC) 啟用增強型路由功能，請務必為叢集所在的 VPC 建立 Amazon S3 VPC 端點和 SageMaker AI VPC 端點。這樣做可在 CREATE MODEL 期間，讓流量在這些服務之間通過您的 VPC。如需詳細資訊，請參閱 [SageMaker AI 澄清作業 Amazon VPC 子網路和安全群組](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-vpc.html#clarify-vpc-job)。

# 使用案例
<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\$1name*   
模型的名稱。結構描述中的模型名稱必須是唯一的。

FROM \$1 *table\$1name* \$1 ( *select\$1query* ) \$1  
指定訓練資料的 table\$1name 或查詢。這可以是系統中現有的資料表，也可以是與 Amazon RedShift 相容的 SELECT 查詢，並以括號括住，也就是 ()。查詢結果中至少必須有兩個資料列。

TARGET *column\$1name*  
成為預測目標的資料欄名稱。該資料欄必須存在於 FROM 子句中。

FUNCTION *prediction\$1function\$1name*   
該值會指定要由 CREATE MODEL 產生的 Amazon Redshift 機器學習函數名稱，並用於使用此模型進行預測。該函數會在與模型物件相同的結構描述中建立，並且可以多載。  
Amazon Redshift 機器學習可支援模型，例如用於迴歸和分類的 Xtreme 梯度提升樹 (XGBoost) 模型。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>' \$1  
 使用預設關鍵字，讓 Amazon Redshift 使用設定為預設並在執行 CREAT MODEL 命令時與叢集關聯的 IAM 角色。或者，您也可以指定 IAM 角色的 ARN 以使用該角色。

 *S3\$1BUCKET *'amzn-s3-demo-bucket'**  
您之前建立的 Amazon S3 儲存貯體名稱，用於在 Amazon Redshift 和 SageMaker AI 之間共用訓練資料和成品。Amazon Redshift 會在卸載訓練資料之前，在此儲存貯體中建立一個子資料夾。訓練完成後，Amazon Redshift 會刪除建立的子資料夾及其內容。

MAX\$1CELLS 整數   
要從 FROM 子句匯出的儲存格數目上限。預設值為 1,000,000。  
儲存格數目是訓練資料 (由 FROM 子句資料表或查詢產生) 中的資料列數乘以資料欄數的乘積。如果訓練資料中的儲存格數目大於 max\$1cell 參數所指定的儲存格數目，CREATE MODEL 會縮減 FROM 子句訓練資料，將訓練集的大小縮減到低於 MAX\$1CELLS。允許更大的訓練資料集可以產生更高的準確性，但也可能意味著模型需要更長的訓練時間和更高的成本。  
如需 Amazon Redshift 使用成本的資訊，請參閱 [使用 Amazon Redshift ML 的成本](cost.md)。  
如需各種儲存格數目的成本和免費試用的相關資訊，請參閱 [Amazon Redshift 定價](https://aws.amazon.com/redshift/pricing)。

## CREATE MODEL 和使用者指引
<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 會自動發現最佳的預處理器和最佳的超參數。

### 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 (, ...)
)
```

### CREATE MODEL 和使用者指引參數
<a name="r_user_guidance-create-model-parameters"></a>

 *MODEL\$1TYPE \$1 XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER \$1*   
(選擇性) 指定模型類型。您可以指定是否要訓練特定模型類型的模型，例如 XGBoost、多層感知器 (MLP) 或線性學習程式，這些都是 Amazon SageMaker AI Autopilot 支援的演算法。如果未指定參數，則會在訓練期間搜尋所有支援的模型類型，以取得最佳模型。

 *PROBLEM\$1TYPE ( REGRESSION \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION )*   
(選擇性) 指定問題類型。如果您知道問題類型，則可以將 Amazon Redshift 限制為僅搜尋該特定模型類型的最佳模型。如果未指定此參數，則訓練期間會根據您的資料探索問題類型。

OBJECTIVE ( 'MSE' \$1 'Accuracy' \$1 'F1' \$1 'F1Macro' \$1 'AUC')  
(選擇性) 指定用來測量機器學習系統預測品質的目標指標名稱。此指標會在訓練期間進行最佳化，從資料中提供模型參數值的最佳估計值。如果您沒有明確指定指標，則預設行為是自動將 MSE: 用於迴歸、將 F1: 用於二進制分類、將 Accuracy: 用於多類別分類。如需目標的詳細資訊，請參閱 *Amazon SageMaker AI API 參考*中的 [AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html)。

MAX\$1CELLS 整數   
(選擇性) 指定訓練資料中的儲存格數目。此值是記錄數目 (訓練查詢或資料表中) 乘以欄數的乘積。預設值為 1,000,000。

MAX\$1RUNTIME 整數   
(選擇性) 指定訓練的時間上限。視資料集大小而定，訓練工作通常會更快完成。這會指定訓練應耗用的時間上限。預設值為 5,400 (90 分鐘)。

S3\$1GARBAGE\$1COLLECT \$1 ON \$1 OFF \$1  
(選擇性) 指定 Amazon Redshift 是否對用於訓練模型的結果資料集和模型執行垃圾回收。如果設定為 OFF，用於訓練模型的結果資料集和模型會保留在 Amazon S3 中，並可用於其他用途。如果設定為 ON，Amazon Redshift 會在訓練完成後刪除 Amazon S3 中的成品。預設值為 ON。

KMS\$1KEY\$1ID 'kms\$1key\$1id'  
(選擇性) 指定 Amazon Redshift 是否使用伺服器端加密搭配 AWS KMS 索引鍵來保護靜態資料。傳輸中的資料會受到 Secure Sockets Layer (SSL) 保護。

 *PREPROCESSORS 'string' *   
(選擇性) 指定特定資料欄集的特定預處理器組合。格式會是 columnSets 清單，以及要套用到每一組資料欄的適當轉換。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 支援以下轉換：
+ OneHotNCoder — 通常用於將離散值編碼為具有一個非零值的二進位向量。此轉換適用於許多機器學習模型。
+ OrdinalEncoder – 將離散值編碼為單一整數。此轉換適用於特定機器學習模型，例如 MLP 和線性學習程式。
+ NumericPassthrough – 將輸入按原樣傳遞到模型中。
+ Imputer – 填入遺漏值，而不是數字 (NaN) 值。
+ ImputerWithIndicator – 填入遺漏值和 NaN 值。此轉換也會建立指出是否有任何值遺失和填入的指示器。
+ Normalizer – 將值標準化，可改善許多機器學習演算法的效能。
+ DateTimeVectorizer – 建立向量內嵌，代表可在機器學習模型中使用的 datetime 資料類型欄。
+ PCA – 將資料投影到較低的維度空間中，以減少特徵數量，同時盡可能保留更多資訊。
+ StandardScaler – 透過移除平均值和縮放至單位變異來將特徵標準化。
+ MinMax – 透過將每個特徵縮放至指定範圍來轉換特徵。

Amazon Redshift ML 會儲存經過訓練的轉換，並在預測查詢中自動套用這些轉換。從模型產生預測時，您不需要指定這些轉換。

## CREATE XGBoost 模型與 AUTO OFF
<a name="r_auto_off_create_model"></a>

AUTO OFF CREATE MODEL 在預設的 CREATE MODEL 中通常有不同的目標。

如果進階使用者已知道想要的模型類型，以及訓練這些模型時所使用的超參數，您可以使用搭配 AUTO OFF 的 CREATE MODEL 來關閉預處理器和超參數的 CREATE MODEL 自動探索功能。若要這樣做，您必須明確指定模型類型。當 AUTO 設定為 OFF 時，XGBoost 是目前唯一支援的模型類型。您可以指定超參數。Amazon Redshift 會針對您指定的任何超參數使用預設值。

### CREATE XGBoost 模型與 AUTO OFF 語法
<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 (, ...)
)
```

### CREATE XGBoost 模型與 AUTO OFF 參數
<a name="r_auto_off-create-model-parameters"></a>

 *AUTO OFF*   
關閉預處理器、演算法和超參數選擇的 CREATE MODEL 自動探索。

MODEL\$1TYPE 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 \$1 DEFAULT \$1 DEFAULT EXCEPT ( key ‘value’ (,..) ) \$1  
指定使用預設的 XGBoost 參數或以使用者指定的值覆寫。這些值必須用單引號括住。以下是 XGBoost 及其預設值的參數範例。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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\$1TYPE、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\$1fn\$1abalone\$1xgboost\$1multi\$1predict\$1age。

```
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\$1name*   
模型的名稱。結構描述中的模型名稱必須是唯一的。

FROM (*'job\$1name'* \$1 *'s3\$1path'* )  
*job\$1name* 會使用 Amazon SageMaker AI 任務名稱作為輸入。工作名稱可以是 Amazon SageMaker AI 訓練任務名稱，也可以是 Amazon SageMaker AI Autopilot 任務名稱。工作必須在擁有 Amazon Redshift 叢集的相同 AWS 帳戶中建立。若要尋找任務名稱，請啟動 Amazon SageMaker AI。在**訓練**下拉式選單中，選擇**訓練工作**。  
*'s3\$1path'* 會指定 .tar.gz 模型成品檔案的 S3 位置，這會在建立模型時使用。

FUNCTION *function\$1name* ( *data\$1type* [, ...] )  
要建立的函數名稱和輸入引數的資料類型。您可以提供結構描述名稱。

RETURNS *data\$1type*  
函數所傳回值的資料類型。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>'\$1  
 使用預設關鍵字，讓 Amazon Redshift 使用設定為預設並在執行 CREATE MODEL 命令時與叢集關聯的 IAM 角色。  
對叢集進行身分驗證和授權時所使用的 IAM 角色使用 Amazon Resource Name (ARN)。

SETTINGS ( S3\$1BUCKET *'amzn-s3-demo-bucket'*, \$1 KMS\$1KEY\$1ID *'kms\$1string'*)  
S3\$1BUCKET 子句會指定用來儲存中繼結果的 Amazon S3 位置。  
（選用） KMS\$1KEY\$1ID 子句指定 Amazon Redshift 是否使用伺服器端加密搭配 AWS KMS 金鑰來保護靜態資料。傳輸中的資料會受到 Secure Sockets Layer (SSL) 保護。  
如需詳細資訊，請參閱[CREATE MODEL 和使用者指引](#r_user_guidance_create_model)。

#### 用於本機推論的 CREATE MODEL 範例
<a name="r_local-create-model-example"></a>

下列範例會建立先前在 Amazon SageMaker AI 中 (Amazon Redshift 外部) 訓練過的模型。由於 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\$1churn\$1predict* 與指定的引數類型來進行預測。

## 使用自有模型 (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\$1name*   
模型的名稱。結構描述中的模型名稱必須是唯一的。

FUNCTION *fn\$1name* ( [*data\$1type*] [, ...] )  
函數的名稱和輸入引數的資料類型。請參閱所有支援資料類型的[資料類型](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)。`Geography`、`geometry` 和 `hllsketch` 不受支援。  
您也可以使用兩部分記號在結構描述內提供函式名稱，例如 `myschema.myfunction`。

RETURNS *data\$1type*  
函數所傳回值的資料類型。請參閱所有支援資料類型的[資料類型](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)。`Geography`、`geometry` 和 `hllsketch` 不受支援。

SAGEMAKER *'endpoint\$1name'*[:*'model\$1name'*]   
Amazon SageMaker AI 端點的名稱。如果端點名稱指向多模型端點，請新增要使用的模型名稱。端點必須託管在與 Amazon Redshift AWS 帳戶 叢集相同的 AWS 區域。若要尋找您的端點，請啟動 Amazon SageMaker AI。在**推論**下拉式功能表中，選擇**端點**。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>'\$1  
 使用預設關鍵字，讓 Amazon Redshift 使用設定為預設並在執行 CREATE MODEL 命令時與叢集關聯的 IAM 角色。或者，您也可以指定 IAM 角色的 ARN 以使用該角色。

MAX\$1BATCH\$1ROWS *integer*  
Amazon Redshift 在單一批次請求中針對單一 SageMaker AI 調用傳送的列數上限。只有具有遠端推論的 BYOM 才支援。批次中的實際列數同樣取決於輸入大小，但小於或等於此值。此參數的最小值為 1。最大值為 `INT_MAX`，或 2,147,483,647。只有在輸入和傳回的資料類型皆為 `SUPER` 時，才需要此參數。預設值為 `INT_MAX`，或 2,147,483,647。

將模型部署到 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` 資料類型作為輸入，則模型的輸出會是單一值，其類型為您建立函式時所指定。輸出格式為透過 SageMaker AI 中的內容類型 `text/CSV` 的逗號分隔值 (CSV)。`VARCHAR` 資料類型前後不可加上引號，也不可包含新行，而且每個輸出必須各為新的一行。
+ 模型接受 null 作為空字串。
+ 輸入資料類型為 `SUPER` 時，只支援一個輸入引數。
+ 輸入資料類型為 `SUPER` 時，傳回的資料類型也必須是 `SUPER`。
+ 當輸入和傳回的資料類型皆為 SUPER 時，需要 MAX\$1BATCH\$1ROWS。
+ 輸入資料類型為 `SUPER` 時，端點調用的內容類型在 MAX\$1BATCH\$1ROWS 為 `1` 的情況下會是 `application/json`，而在所有其他情況下則為 `application/jsonlines`。
+ 傳回的資料類型為 `SUPER` 時，端點調用的接受類型在 MAX\$1BATCH\$1ROWS 為 `1` 的情況下會是 `application/json`，而在所有其他情況下則為 `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\$1BATCH\$1ROWS 必須設定為 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);
```

## CREATE MODEL 與 K-MEANS
<a name="r_k-means_create_model"></a>

Amazon Redshift 支援可將未標示資料分組的 K 平均值演算法。此演算法可解決您想在資料中探索分組的叢集問題。未分類的資料會根據其相似性和差異進行分組和分割。

### CREATE MODEL 與 K-MEANS 語法
<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);
```

### CREATE MODEL 與 K-MEANS 參數
<a name="r_k-means-create-model-parameters"></a>

 *AUTO OFF*   
關閉預處理器、演算法和超參數選擇的 CREATE MODEL 自動探索。

MODEL\$1TYPE KMEANS  
指定使用 KMEANS 來訓練模型。

PREPROCESSORS 'string'  
指定特定資料欄集的特定預處理器組合。格式會是 columnSets 清單，以及要套用到每一組資料欄的適當轉換。Amazon Redshift 支援 3 個 K 平均值預處理器，即 StandardScaler、MinMax 和 NumericPassthrough。如果您不想對 K 平均值套用任何預處理，請明確選擇 NumericPassthrough 作為轉換器。如需轉換器的相關資訊，請參閱 [CREATE MODEL 和使用者指引參數](#r_user_guidance-create-model-parameters)。  
K 平均值演算法會使用歐幾里德距離來計算相似性。預處理資料可確保模型的特徵保持相同的比例並產生可靠的結果。

HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )  
指定是否使用 K 平均值參數。使用 K 平均值演算法時，您必須指定 `K` 參數。如需詳細資訊，請參閱《Amazon SageMaker AI 開發人員指南》**中的 [K 平均值超參數](https://docs.aws.amazon.com/sagemaker/latest/dg/k-means-api-config.html)

下列範例會準備 K 平均值的資料。

```
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 與預測
<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 與預測語法
<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 與預測參數
<a name="r_forecast_model-parameters"></a>

 *forecast\$1model\$1name*   
模型的名稱。模型名稱必須是唯一的。

FROM \$1 table\$1name \$1 ( select\$1query ) \$1  
指定訓練資料的 table\$1name 或查詢。這可以是系統中現有的資料表，也可以是與 Amazon RedShift 相容的 SELECT 查詢 (以括號括住)。資料表或查詢結果至少必須有三個資料欄：(1) 指定時間序列名稱的 varchar 資料欄。每個資料集可以有多個時間序列；(2) 一個日期時間資料欄；以及 (3) 要預測的目標資料欄。此目標資料欄必須是整數或浮點數。如果您提供的資料集包含三個以上的資料欄，Amazon Redshift 會假設所有其他資料欄都是相關時間序列的一部分。請注意，相關的時間序列必須是整數或浮點數類型。如需相關時間序列的相關資訊，請參閱[使用相關時間序列資料集](https://docs.aws.amazon.com/forecast/latest/dg/related-time-series-datasets.html)。

TARGET column\$1name  
成為預測目標的資料欄名稱。該資料欄必須存在於 FROM 子句中。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>' \$1  
使用預設關鍵字，讓 Amazon Redshift 使用設定為預設並在執行 CREAT MODEL 命令時與叢集關聯的 IAM 角色。或者，您可以指定 IAM 角色的 ARN 以使用該角色。

AUTO ON  
開啟演算法和超參數選擇的 CREATE MODEL 自動探索。在建立預測模型時指定開啟，以使用 Forecast AutoPredictor，其中 Amazon Forecast 會將最佳演算法組合套用至資料集中的每個時間序列。

MODEL\$1TYPE FORECAST  
指定使用 FORECAST 來訓練模型。

S3\$1BUCKET 'amzn-s3-demo-bucket'  
您之前建立的 Amazon Simple Storage Service 儲存貯體名稱，用於在 Amazon Redshift 和 Amazon Forecast 之間共用訓練資料和成品。Amazon Redshift 會在卸載訓練資料之前，在此儲存貯體中建立一個子資料夾。訓練完成後，Amazon Redshift 會刪除建立的子資料夾及其內容。

HORIZON 整數  
預測模型可傳回的預測數量上限。模型一經過訓練，就無法再變更此整數。

FREQUENCY forecast\$1frequency  
指定您想要的預測細微程度。可用選項為 `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
```