

 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/)。

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

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

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

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

FUNCTION *prediction\_function\_name*   
該值會指定要由 CREATE MODEL 產生的 Amazon Redshift 機器學習函數名稱，並用於使用此模型進行預測。該函數會在與模型物件相同的結構描述中建立，並且可以多載。  
Amazon Redshift 機器學習可支援模型，例如用於迴歸和分類的 Xtreme 梯度提升樹 (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 子句匯出的儲存格數目上限。預設值為 1,000,000。  
儲存格數目是訓練資料 (由 FROM 子句資料表或查詢產生) 中的資料列數乘以資料欄數的乘積。如果訓練資料中的儲存格數目大於 max\_cell 參數所指定的儲存格數目，CREATE MODEL 會縮減 FROM 子句訓練資料，將訓練集的大小縮減到低於 MAX\_CELLS。允許更大的訓練資料集可以產生更高的準確性，但也可能意味著模型需要更長的訓練時間和更高的成本。  
如需 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\_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: 用於二進制分類、將 Accuracy: 用於多類別分類。如需目標的詳細資訊，請參閱 *Amazon SageMaker AI API 參考*中的 [AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html)。

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

MAX\_RUNTIME 整數   
(選擇性) 指定訓練的時間上限。視資料集大小而定，訓練工作通常會更快完成。這會指定訓練應耗用的時間上限。預設值為 5,400 (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 索引鍵來保護靜態資料。傳輸中的資料會受到 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\_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_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\_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*   
模型的名稱。結構描述中的模型名稱必須是唯一的。

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* [, ...] )  
要建立的函數名稱和輸入引數的資料類型。您可以提供結構描述名稱。

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

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

SETTINGS ( S3\_BUCKET *'amzn-s3-demo-bucket'*, \| KMS\_KEY\_ID *'kms\_string'*)  
S3\_BUCKET 子句會指定用來儲存中繼結果的 Amazon S3 位置。  
（選用） KMS\_KEY\_ID 子句指定 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\_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*   
模型的名稱。結構描述中的模型名稱必須是唯一的。

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 使用設定為預設並在執行 CREATE MODEL 命令時與叢集關聯的 IAM 角色。或者，您也可以指定 IAM 角色的 ARN 以使用該角色。

MAX\_BATCH\_ROWS *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\_BATCH\_ROWS。
+ 輸入資料類型為 `SUPER` 時，端點調用的內容類型在 MAX\_BATCH\_ROWS 為 `1` 的情況下會是 `application/json`，而在所有其他情況下則為 `application/jsonlines`。
+ 傳回的資料類型為 `SUPER` 時，端點調用的接受類型在 MAX\_BATCH\_ROWS 為 `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\_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);
```

## 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\_TYPE 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\_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 自動探索。在建立預測模型時指定開啟，以使用 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
```