

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

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

# 使用 COPY 命令從 Amazon S3 載入
<a name="t_loading-tables-from-s3"></a>

使用 [COPY](r_COPY.md) 命令從 Amazon S3 上的資料檔案平行載入資料表。您可以透過使用 Amazon S3 物件字首或使用資訊清單檔案來指定要載入的檔案。

使用字首指定要載入之檔案的語法如下所示：

```
COPY <table_name> FROM 's3://<bucket_name>/<object_prefix>'
authorization;
```

 資訊清單檔案為 JSON 格式檔案，列出要載入的資料檔案。使用資訊清單檔案指定要載入之檔案的語法如下所示：

```
COPY <table_name> FROM 's3://<bucket_name>/<manifest_file>'
authorization
MANIFEST;
```

要載入的資料表必須已存在於資料庫中。如需建立資料表的詳細資訊，請參閱 SQL 參考中的 [CREATE TABLE](r_CREATE_TABLE_NEW.md)。

*授權*值提供 Amazon Redshift 存取 Amazon S3 物件所需的 AWS 授權。如需所需許可的詳細資訊，請參閱[COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)。身分驗證的偏好方法是指定 IAM\$1ROLE 參數，並提供 IAM 角色的 Amazon Resource Name (ARN) 所需的許可。如需詳細資訊，請參閱[角色類型存取控制](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)。

若要使用 IAM\$1ROLE 參數進行驗證，請取代 *<aws-account-id>* 和 *<role-name>*，如下列語法所示。

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```

下列範例顯示使用 IAM 角色進行身分驗證。

```
COPY customer 
FROM 's3://amzn-s3-demo-bucket/mydata' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

如需其他授權選項的相關資訊，請參閱[授權參數](copy-parameters-authorization.md)

如果想要驗證您的資料而不實際載入資料表，請使用 NOLOAD 選項搭配 [COPY](r_COPY.md) 命令。

下列範例顯示名為 `venue.txt` 的檔案中以管線分隔資料的前幾個資料列。

```
1|Toyota Park|Bridgeview|IL|0
2|Columbus Crew Stadium|Columbus|OH|0
3|RFK Stadium|Washington|DC|0
```

上傳檔案至 Amazon S3 之前，將檔案分割為多個檔案，使得 COPY 命令可以使用平行處理載入它。檔案數量應為您叢集中的分割的倍數。分割您的載入資料，使檔案皆有相同的大小，在壓縮之後介於 1 MB 至 1 GB。如需詳細資訊，請參閱[從已壓縮和未壓縮的檔案載入資料](t_splitting-data-files.md)。

例如，`venue.txt` 檔案可以分割為四個檔案，如下所示：

```
venue.txt.1
venue.txt.2
venue.txt.3
venue.txt.4
```

下列 COPY 命令會使用資料檔案中以管線分隔的資料來載入 VENUE 資料表，具有 Amazon S3 儲存貯體 `amzn-s3-demo-bucket` 中的字首 'venue'。

**注意**  
下列範例中的 Amazon S3 儲存貯體 `amzn-s3-demo-bucket` 不存在。如需使用現有 Amazon S3 儲存貯體中實際資料的 COPY 命令範例，請參閱[載入範例資料](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html)。

```
COPY venue FROM 's3://amzn-s3-demo-bucket/venue'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
DELIMITER '|';
```

如果不存在具有 'venue' 金鑰前綴的任何 Amazon S3 物件，則載入會失敗。

**Topics**
+ [

# 使用資訊清單指定資料檔案
](loading-data-files-using-manifest.md)
+ [

# 從 Amazon S3 載入壓縮的資料檔案
](t_loading-gzip-compressed-data-files-from-S3.md)
+ [

# 從 Amazon S3 載入固定寬度資料
](t_loading_fixed_width_data.md)
+ [

# 從 Amazon S3 載入多位元組資料
](t_loading_unicode_data.md)
+ [

# 從 Amazon S3 載入加密的資料檔案
](c_loading-encrypted-files.md)

# 使用資訊清單指定資料檔案
<a name="loading-data-files-using-manifest"></a>

您可以使用清單檔案來確保 COPY 命令會載入所有必要檔案 (且只有必要檔案) 進行資料載入。您可以使用資訊清單從不同儲存貯體載入檔案，或載入不共用相同字首的檔案。不要為 COPY 命令提供物件路徑，而是提供明確列出要載入之檔案的 JSON 格式文字檔案名稱。資訊清單檔案中的 URL 必須指定儲存貯體名稱以及檔案的完整物件路徑，而不只是字首。

如需資訊清單檔案的相關資訊，請參閱[使用資訊清單來指定資料檔案](r_COPY_command_examples.md#copy-command-examples-manifest) COPY 範例。

下列範例顯示的 JSON 會從不同的儲存貯體載入檔案，並具有開頭為日期戳記的檔案名稱。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket1/2013-10-05-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/2013-10-05-custdata", "mandatory":true}
  ]
}
```

選用的 `mandatory` 旗標會指定找不到檔案時 COPY 是否應該傳回錯誤。`mandatory` 的預設值為 `false`。不考慮任何必要設定，只要找不到檔案，COPY 就會終止。

下列範例會執行 COPY 命令並搭配上一個範例中的資訊清單，名為 `cust.manifest`。

```
COPY customer
FROM 's3://amzn-s3-demo-bucket/cust.manifest' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MANIFEST;
```

## 使用 UNLOAD 建立的資訊清單
<a name="loading-data-files-using-unload-manifest"></a>

[UNLOAD](r_UNLOAD.md) 操作使用 MANIFEST 參數建立的資訊清單可能會有 COPY 操作不需要的索引鍵。例如，以下 `UNLOAD` 清單檔案包含 `meta` 索引鍵，針對 Amazon Redshift Spectrum 外部資料表，還有載入 `ORC` 或 `Parquet` 檔案格式的資料檔案時，都需要此索引鍵。`meta` 索引鍵包含的 `content_length` 索引鍵具有的值為檔案的實際大小 (以位元組為單位)。COPY 操作僅需要 `url` 索引鍵和選用的 `mandatory` 索引鍵。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/unload/manifest_0000_part_00", "meta": { "content_length": 5956875 }},
    {"url":"s3://amzn-s3-demo-bucket/unload/unload/manifest_0001_part_00", "meta": { "content_length": 5997091 }}
 ]
}
```

如需資訊清單檔案的相關資訊，請參閱[使用資訊清單指定資料檔案](r_COPY_command_examples.md#copy-command-examples-manifest)。

# 從 Amazon S3 載入壓縮的資料檔案
<a name="t_loading-gzip-compressed-data-files-from-S3"></a>

若要載入使用 gzip、lzop 或 bzip2 壓縮的資料檔案，請併入對應的選項：GZIP、LZOP 或 BZIP2。

例如，下列命令會從使用 lzop 壓縮的檔案載入。

```
COPY customer FROM 's3://amzn-s3-demo-bucket/customer.lzo' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
DELIMITER '|' LZOP;
```

**注意**  
如果您使用 lzop 壓縮來壓縮資料檔案並使用 *--filter* 選項，則 COPY 命令不支援它。

# 從 Amazon S3 載入固定寬度資料
<a name="t_loading_fixed_width_data"></a>

固定寬度資料檔案其資料的每個資料欄長度一致。固定寬度資料檔案中的每個欄位有完全相同的長度和位置。針對固定寬度資料檔案中的字元資料 (CHAR 和 VARCHAR)，您必須包括前方或結尾空格做為預留位置以便維持寬度統一。針對整數，您必須使用前方零做為預留位置。固定寬度資料檔案沒有分隔符號可分隔資料欄。

若要將固定寬度資料檔案載入至現有資料表，請在 COPY 命令中使用 FIXEDWIDTH 參數。您的資料表規格必須符合 fixedwidth\$1spec 的值，資料才能正確載入。

若要從檔案載入固定寬度資料至資料表，請發出下列命令：

```
COPY table_name FROM 's3://amzn-s3-demo-bucket/prefix' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
FIXEDWIDTH 'fixedwidth_spec';
```

*fixedwidth\$1spec* 參數是字串，包含每個資料欄的識別碼以及每個資料欄的寬度，以冒號分隔。**column:width** 對組是使用逗號分隔。識別碼可以是您選擇的任何項目：數字、字母或兩者的結合。識別碼對資料表本身沒有關聯，所有規格必須以與資料表相同的順序包含資料欄。

下列兩個範例會顯示相同的規格，第一個使用數值識別碼，而第二個使用字串識別碼：

```
'0:3,1:25,2:12,3:2,4:6'
```

```
'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6'
```

下列範例顯示可以使用上述規格載入至 VENUE 資料表的固定寬度樣本資料：

```
1  Toyota Park               Bridgeview  IL0
2  Columbus Crew Stadium     Columbus    OH0
3  RFK Stadium               Washington  DC0
4  CommunityAmerica Ballpark Kansas City KS0
5  Gillette Stadium          Foxborough  MA68756
```

下列 COPY 命令會將此資料集載入至 VENUE 資料表：

```
COPY venue
FROM 's3://amzn-s3-demo-bucket/data/venue_fw.txt' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
FIXEDWIDTH 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6';
```

# 從 Amazon S3 載入多位元組資料
<a name="t_loading_unicode_data"></a>

如果資料包含非 ASCII 多位元組字元 (例如中文或斯拉夫文字元)，您必須將資料載入 VARCHAR 欄。VARCHAR 資料類型支援四位元組 UTF-8 字元，但 CHAR 資料類型只接受單位元組 ASCII 字元。您無法將五位元組或更長的字元載入 Amazon Redshift 資料表。如需 CHAR 和 VARCHAR 的相關資訊，請參閱[資料類型](c_Supported_data_types.md)。

若要檢查輸入檔案使用的編碼，請使用 Linux * `file` * 命令：

```
$ file ordersdata.txt
ordersdata.txt: ASCII English text
$ file uni_ordersdata.dat
uni_ordersdata.dat: UTF-8 Unicode text
```

# 從 Amazon S3 載入加密的資料檔案
<a name="c_loading-encrypted-files"></a>

您可以使用 COPY 命令來載入使用伺服器端加密、用戶端加密 (或兩者) 上傳至 Amazon S3 的資料檔案。

COPY 命令支援下列類型的 Amazon S3 加密：
+ 使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密
+ 伺服器端加密搭配 AWS KMS keys (SSE-KMS)
+ 使用用戶端對稱根金鑰的用戶端加密

COPY 命令不支援下列類型的 Amazon S3 加密：
+ 使用客戶提供金鑰 (SSE-C) 的伺服器端加密
+ 使用 的用戶端加密 AWS KMS key
+ 使用客戶提供非對稱根金鑰的用戶端加密

如需 Amazon S3 加密的相關資訊，請參閱《Amazon Simple Storage Service 開發人員指南》中的[使用伺服器端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)和[使用用戶端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)。

[UNLOAD](r_UNLOAD.md) 命令會使用 SSE-S3 自動加密檔案。您也可以使用 SSE-KMS 或客戶管理對稱金鑰的用戶端加密來進行卸載。如需詳細資訊，請參閱[卸載加密的資料檔案](t_unloading_encrypted_files.md)

COPY 命令會自動識別和載入使用 SSE-S3 和 SSE-KMS 加密的檔案。您可以透過指定 ENCRYPTED 選項並提供金鑰值，以載入使用用戶端對稱根金鑰加密的檔案。如需詳細資訊，請參閱[將加密資料上傳到 Amazon S3](t_uploading-encrypted-data.md)。

若要載入用戶端加密的資料檔案，請使用 MASTER\$1SYMMETRIC\$1KEY 參數並包括 ENCRYPTED 選項來提供根金鑰值。

```
COPY customer FROM 's3://amzn-s3-demo-bucket/encrypted/customer' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MASTER_SYMMETRIC_KEY '<root_key>' 
ENCRYPTED
DELIMITER '|';
```

若要載入使用 gzip、lzop 或 bzip2 壓縮的加密資料檔案，請併入 GZIP、LZOP 或 BZIP2 選項與根金鑰值和 ENCRYPTED 選項。

```
COPY customer FROM 's3://amzn-s3-demo-bucket/encrypted/customer' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MASTER_SYMMETRIC_KEY '<root_key>'
ENCRYPTED 
DELIMITER '|' 
GZIP;
```