

 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 參數參考
<a name="r_COPY-parameters"></a>

COPY 具有許多參數，可以在許多情況下使用。但是，並非每種情況都支援所有參數。例如，若要從 ORC 或 PARQUET 檔案載入，支援的參數數目有限。如需詳細資訊，請參閱[從單欄資料格式 COPY](copy-usage_notes-copy-from-columnar.md)。

**Topics**
+ [資料來源](copy-parameters-data-source.md)
+ [授權參數](copy-parameters-authorization.md)
+ [欄映射選項](copy-parameters-column-mapping.md)
+ [資料格式參數](copy-parameters-data-format.md)
+ [檔案壓縮參數](copy-parameters-file-compression.md)
+ [資料轉換參數](copy-parameters-data-conversion.md)
+ [資料載入操作](copy-parameters-data-load.md)
+ [依字母排序的參數清單](r_COPY-alphabetical-parm-list.md)

# 資料來源
<a name="copy-parameters-data-source"></a>

您可以從位於 Amazon S3 儲存貯體、Amazon EMR 叢集或遠端主機 (叢集可利用 SSH 連線來存取) 的文字檔案來載入資料。您也可以直接從 DynamoDB 資料表載入資料。

任何來源的單一輸入資料列最大為 4 MB。

若要將資料表中的資料匯出至 Amazon S3 中的一組檔案，請使用 [UNLOAD](r_UNLOAD.md) 命令。

**Topics**
+ [從 Amazon S3 進行 COPY](copy-parameters-data-source-s3.md)
+ [從 Amazon EMR 進行 COPY](copy-parameters-data-source-emr.md)
+ [從遠端主機 COPY (SSH)](copy-parameters-data-source-ssh.md)
+ [從 Amazon DynamoDB 進行 COPY](copy-parameters-data-source-dynamodb.md)

# 從 Amazon S3 進行 COPY
<a name="copy-parameters-data-source-s3"></a>

若要從位於一或多個 S3 儲存貯體的檔案載入資料，請使用 FROM 子句來指出 COPY 如何尋找 Amazon S3 中的檔案。您可以在 FROM 子句中提供資料檔案的物件路徑，或提供資訊清單檔案 (包含 Amazon S3 物件路徑清單) 的位置。來自 Amazon S3 的 COPY 會使用 HTTPS 連線。確定 S3 IP 範圍已新增至您的允許清單。若要進一步了解所需的 S3 IP 範圍，請參閱[網路隔離](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation)。

**重要**  
如果存放資料檔案的 Amazon S3 儲存貯體不在與叢集相同的 AWS 區域中，您必須使用 [REGION](#copy-region) 參數來指定資料所在的區域。

**Topics**
+ [語法](#copy-parameters-data-source-s3-syntax)
+ [範例](#copy-parameters-data-source-s3-examples)
+ [選用的參數](#copy-parameters-data-source-s3-optional-parms)
+ [不支援的參數](#copy-parameters-data-source-s3-unsupported-parms)

## 語法
<a name="copy-parameters-data-source-s3-syntax"></a>

```
FROM { 's3://objectpath' | 's3://manifest_file' }
authorization
| MANIFEST
| ENCRYPTED
| REGION [AS] 'aws-region'
| optional-parameters
```

## 範例
<a name="copy-parameters-data-source-s3-examples"></a>

下列範例使用物件路徑以從 Amazon S3 載入資料。

```
copy customer
from 's3://amzn-s3-demo-bucket/customer' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

下列範例使用資訊清單檔案以從 Amazon S3 載入資料。

```
copy customer
from 's3://amzn-s3-demo-bucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

### Parameters
<a name="copy-parameters-data-source-s3-parameters"></a>

FROM  <a name="copy-parameters-from"></a>
載入的資料來源。如需 Amazon S3 檔案編碼的相關資訊，請參閱[資料轉換參數](copy-parameters-data-conversion.md)。

's3://*copy\$1from\$1s3\$1objectpath*'  <a name="copy-s3-objectpath"></a>
指定含有資料之 Amazon S3 物件的路徑 Amazon S3 - 例如 `'s3://amzn-s3-demo-bucket/custdata.txt'`。*s3://copy\$1from\$1s3\$1objectpath* 參數可以參考單一檔案，或一組有相同金鑰前綴的物件或資料夾。例如，`custdata.txt` 這個名稱是參考一些實體檔案的金鑰前綴：`custdata.txt`、`custdata.txt.1`、`custdata.txt.2`、`custdata.txt.bak` 等。金鑰前綴也可以參考一些資料夾。例如，`'s3://amzn-s3-demo-bucket/custfolder'` 參考資料夾 `custfolder`、`custfolder_1`、`custfolder_2` 等。如果金鑰前綴參考多個資料夾，則會載入這些資料夾中的所有檔案。如果金鑰前綴符合檔案又符合資料夾，例如 `custfolder.log`，COPY 也會嘗試載入此檔案。如果金鑰前綴可能導致 COPY 嘗試載入不需要的檔案，請使用資訊清單檔案。如需詳細資訊，請參閱下列 [copy_from_s3_manifest_file](#copy-manifest-file)。  
如果存放資料檔案的 S3 儲存貯體不是位於與叢集相同的 AWS 區域，您必須使用 [REGION](#copy-region) 參數來指定資料所在的區域。
如需詳細資訊，請參閱[從 Amazon S3 載入資料](t_Loading-data-from-S3.md)。

's3://*copy\$1from\$1s3\$1manifest\$1file*'  <a name="copy-manifest-file"></a>
指定資訊清單檔案 (列出要載入的資料檔案) 的 Amazon S3 物件金鑰。*'s3://*copy\$1from\$1s3\$1manifest\$1file'** 引數必須明確參考單一檔案 - 例如 `'s3://amzn-s3-demo-bucket/manifest.txt'`。無法參考金鑰前綴。  
清單檔案是 JSON 格式的文字檔案，其中列出要從 Amazon S3 載入之每個檔案的 URL。URL 包含檔案的儲存貯體名稱和完整物件路徑。資訊清單中指定的檔案可以位於不同的儲存貯體，但所有儲存貯體都必須位於與 Amazon Redshift 叢集相同的 AWS 區域。如果某個檔案列出兩次，則該檔案會載入兩次。下列範例顯示資訊清單的 JSON，此資訊清單會載入三個檔案。  

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1","mandatory":false}
  ]
}
```
雙引號字元是必要的，且必須是簡單引號 (0x22)，而不是斜向或「智慧型」引號。資訊清單中的每個項目可以選擇性包含 `mandatory` 旗標。如果 `mandatory` 設為 `true`，COPY 找不到該項目的檔案時會終止；否則，COPY 會繼續。`mandatory` 的預設值為 `false`。  
載入格式為 ORC 或 Parquet 的資料檔案時，需要 `meta` 欄位，如下列範例所示。  

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      },
      {  
         "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      }
   ]
}
```
即使指定 ENCRYPTED、GZIP、LZOP、BZIP2 或 ZSTD 選項，也不可對資訊清單檔案進行加密或壓縮。如果找不到指定的資訊清單檔案，或資訊清單檔案的格式不正確，COPY 會傳回錯誤。  
如果使用資訊清單檔案，則必須使用 COPY 命令指定 MANIFEST 參數。如果未指定 MANIFEST 參數，COPY 會假設 FROM 指定的檔案是資料檔案。  
如需詳細資訊，請參閱[從 Amazon S3 載入資料](t_Loading-data-from-S3.md)。

*authorization*  
COPY 命令需要取得授權來存取另一個 AWS 資源中 (包括在 Amazon S3、Amazon EMR、Amazon DynamoDB 和 Amazon EC2 中) 的資料。您可以參考連接至叢集的 AWS Identity and Access Management (IAM) 角色 （以角色為基礎的存取控制），或提供使用者的存取憑證 （以金鑰為基礎的存取控制），以提供該授權。為了提高安全性和彈性，建議使用 IAM 角色型存取控制。如需詳細資訊，請參閱[授權參數](copy-parameters-authorization.md)。

MANIFEST  <a name="copy-manifest"></a>
指定使用清單檔案來指出要從 Amazon S3 載入的資料檔案。如果使用 MANIFEST 參數，COPY 會從 *'s3://copy\$1from\$1s3\$1manifest\$1file'* 參考的資訊清單中所列的檔案載入資料。如果找不到資訊清單檔案，或此檔案的格式不正確，COPY 會失敗。如需詳細資訊，請參閱[使用資訊清單指定資料檔案](loading-data-files-using-manifest.md)。

ENCRYPTED  <a name="copy-encrypted"></a>
此子句指定 Amazon S3 上的輸入檔案是以用戶端加密搭配客戶管理金鑰來加密。如需詳細資訊，請參閱[從 Amazon S3 載入加密的資料檔案](c_loading-encrypted-files.md)。如果輸入檔案是以 Amazon S3 伺服器端加密 (SSE-KMS 或 SSE-S3) 所加密，請勿指定 ENCRYPTED。COPY 會自動讀取伺服器端加密檔案。  
如果指定 ENCRYPTED 參數，則還必須指定 [MASTER_SYMMETRIC_KEY](#copy-master-symmetric-key) 參數，或在 [使用 CREDENTIALS 參數](copy-parameters-authorization.md#copy-credentials) 字串中包含 **master\$1symmetric\$1key** 值。  
如果加密檔案是壓縮格式，請增加 GZIP、LZOP、BZIP2 或 ZSTD 參數。  
即使指定 ENCRYPTED 選項，也不得對資訊清單檔案和 JSONPaths 檔案進行加密。

MASTER\$1SYMMETRIC\$1KEY '*root\$1key*'  <a name="copy-master-symmetric-key"></a>
用於將 Amazon S3 上的資料檔案加密的根對稱金鑰。如果指定 MASTER\$1SYMMETRIC\$1KEY，則還必須指定 [ENCRYPTED](#copy-encrypted) 參數。MASTER\$1SYMMETRIC\$1KEY 不能與 CREDENTIALS 參數一起使用。如需詳細資訊，請參閱[從 Amazon S3 載入加密的資料檔案](c_loading-encrypted-files.md)。  
如果加密檔案是壓縮格式，請增加 GZIP、LZOP、BZIP2 或 ZSTD 參數。

REGION [AS] '*aws-region*'  <a name="copy-region"></a>
指定來源資料所在的 AWS 區域。當含有資料的 AWS 資源所在區域與 Amazon Redshift 叢集的區域不是同一個區域時，從 Amazon S3 儲存貯體或 DynamoDB 資料表的 COPY 需要 REGION。  
*aws\$1region* 的值必須符合 [Amazon Redshift 區域與端點](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region)資料表所列的區域。  
如果指定 REGION 參數，則所有資源 (包括資訊清單檔案或多個 Amazon S3 儲存貯體) 都必須位於指定的區域。  
跨區域傳輸資料需要為含有資料的 Amazon S3 儲存貯體或 DynamoDB 資料表另外付費。如需定價的詳細資訊，請參閱 **Amazon S3 定價頁面上從 Amazon S3 傳出至其他 AWS 區域的資料傳輸**，以及 [Amazon DynamoDB 定價](https://aws.amazon.com/dynamodb/pricing/)頁面上的 **傳出資料傳輸**。 [Amazon S3 ](https://aws.amazon.com/s3/pricing/) 
根據預設，COPY 會假設資料與 Amazon Redshift 叢集位於相同區域。

## 選用的參數
<a name="copy-parameters-data-source-s3-optional-parms"></a>

從 Amazon S3 COPY 時，您可以選擇性指定下列參數：
+ [欄映射選項](copy-parameters-column-mapping.md)
+ [資料格式參數](copy-parameters-data-format.md#copy-data-format-parameters)
+ [資料轉換參數](copy-parameters-data-conversion.md)
+ [資料載入操作](copy-parameters-data-load.md)

## 不支援的參數
<a name="copy-parameters-data-source-s3-unsupported-parms"></a>

從 Amazon S3 COPY 時，您不能使用下列參數：
+ SSH
+ READRATIO

# 從 Amazon EMR 進行 COPY
<a name="copy-parameters-data-source-emr"></a>

您可以使用 COPY 命令從 Amazon EMR 叢集平行載入資料，而該叢集設定為以固定寬度檔案、字元分隔檔案、CSV 檔案、JSON 格式檔案或 Avro 檔案的形式，將文字檔案寫入叢集的 Hadoop 分散式檔案系統 (HDFS)。

**Topics**
+ [語法](#copy-parameters-data-source-emr-syntax)
+ [範例](#copy-parameters-data-source-emr-example)
+ [Parameters](#copy-parameters-data-source-emr-parameters)
+ [支援的參數](#copy-parameters-data-source-emr-optional-parms)
+ [不支援的參數](#copy-parameters-data-source-emr-unsupported-parms)

## 語法
<a name="copy-parameters-data-source-emr-syntax"></a>

```
FROM 'emr://emr_cluster_id/hdfs_filepath'  
authorization
[ optional_parameters ]
```

## 範例
<a name="copy-parameters-data-source-emr-example"></a>

下列範例從 Amazon EMR 叢集載入資料。

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Parameters
<a name="copy-parameters-data-source-emr-parameters"></a>

FROM  
載入的資料來源。

 'emr://*emr\$1cluster\$1id*/*hdfs\$1file\$1path*'  <a name="copy-emr"></a>
Amazon EMR 叢集的唯一識別碼，以及 HDFS 檔案路徑 (參考 COPY 命令的資料檔案)。HDFS 資料檔案名稱不能包含萬用字元星號 (\$1) 和問號 (?)。  
Amazon EMR 叢集必須一直運作到 COPY 操作完成為止。如果 COPY 操作完成之前有任何 HDFS 資料檔案經變更或遭刪除，可能會發生非預期的結果，COPY 操作也可能失敗。
您可以在 *hdfs\$1file\$1path* 引數中使用萬用字元星號 (\$1) 和問號 (?) 來指定要載入的多個檔案。例如，`'emr://j-SAMPLE2B500FC/myoutput/part*'` 表示檔案 `part-0000`、`part-0001`，以此類推。如果檔案路徑不含萬用字元，則視為字串常值。如果僅指定資料夾名稱，COPY 會嘗試載入該資料夾中的所有檔案。  
如果使用萬用字元或只使用資料夾名稱，請確認不會載入不需要的檔案。例如，某些程序可能將日誌檔案寫入至輸出資料夾。
如需詳細資訊，請參閱[從 Amazon EMR 載入資料](loading-data-from-emr.md)。

*authorization*  
COPY 命令需要取得授權來存取另一個 AWS 資源中 (包括在 Amazon S3、Amazon EMR、Amazon DynamoDB 和 Amazon EC2 中) 的資料。您可以參考連接至叢集的 AWS Identity and Access Management (IAM) 角色 （以角色為基礎的存取控制），或提供使用者的存取憑證 （以金鑰為基礎的存取控制），以提供該授權。為了提高安全性和彈性，建議使用 IAM 角色型存取控制。如需詳細資訊，請參閱[授權參數](copy-parameters-authorization.md)。

## 支援的參數
<a name="copy-parameters-data-source-emr-optional-parms"></a>

從 Amazon EMR COPY 時，您可以選擇性指定下列參數：
+ [欄映射選項](copy-parameters-column-mapping.md)
+ [資料格式參數](copy-parameters-data-format.md#copy-data-format-parameters)
+ [資料轉換參數](copy-parameters-data-conversion.md)
+ [資料載入操作](copy-parameters-data-load.md)

## 不支援的參數
<a name="copy-parameters-data-source-emr-unsupported-parms"></a>

從 Amazon EMR COPY 時，您不能使用下列參數：
+ ENCRYPTED
+ MANIFEST
+ REGION
+ READRATIO
+ SSH

# 從遠端主機 COPY (SSH)
<a name="copy-parameters-data-source-ssh"></a>

您可以使用 COPY 命令從一或多台遠端主機平行載入資料，例如 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體或其他電腦。COPY 會使用 Secure Shell (SSH) 連接至遠端主機，然後在遠端主機執行命令來產生文字輸出。遠端主機可以是 EC2 Linux 執行個體，或另一台設定為接受 SSH 連線的 Unix 或 Linux 電腦。Amazon Redshift 可以連線到多台主機，而且可以對每台主機開啟多個 SSH 連線。Amazon Redshift 會透過每個連線傳送一個唯一的命令，將文字輸出產生到主機的標準輸出，然後 Amazon Redshift 會像讀取文字檔一樣讀取該輸出。

使用 FROM 子句來指定資訊清單檔案的 Amazon S3 物件金鑰，此資訊清單檔案提供讓 COPY 用來開啟 SSH 連線和執行遠端命令的資訊。

**Topics**
+ [語法](#copy-parameters-data-source-ssh-syntax)
+ [範例](#copy-parameters-data-source-ssh-examples)
+ [Parameters](#copy-parameters-data-source-ssh-parameters)
+ [選用的參數](#copy-parameters-data-source-ssh-optional-parms)
+ [不支援的參數](#copy-parameters-data-source-ssh-unsupported-parms)

**重要**  
 如果存放資訊清單檔案的 S3 儲存貯體所在區域與叢集的 AWS 區域不是同一個，您必須使用 REGION 參數來指定儲存貯體所在的區域。

## 語法
<a name="copy-parameters-data-source-ssh-syntax"></a>

```
FROM 's3://'ssh_manifest_file' }
authorization
SSH
| optional-parameters
```

## 範例
<a name="copy-parameters-data-source-ssh-examples"></a>

下列範例使用資訊清單檔案，以利用 SSH 從遠端主機載入資料。

```
copy sales
from 's3://amzn-s3-demo-bucket/ssh_manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
ssh;
```

## Parameters
<a name="copy-parameters-data-source-ssh-parameters"></a>

FROM  
載入的資料來源。

's3://*copy\$1from\$1ssh\$1manifest\$1file*'  <a name="copy-ssh-manifest"></a>
COPY 命令可以使用 SSH 來連接至多台主機，也可以對每台主機建立多個 SSH 連線。COPY 會透過每個主機連線執行命令，然後將命令的輸出平行載入資料表。*s3://copy\$1from\$1ssh\$1manifest\$1file* 引數會指定資訊清單檔案的 Amazon S3 物件金鑰，此清單檔案會提供讓 COPY 用來開啟 SSH 連線和執行遠端命令的資訊。  
*s3://copy\$1from\$1ssh\$1manifest\$1file* 引數必須明確參考單一檔案；不能是金鑰字首。如下列範例所示：  

```
's3://amzn-s3-demo-bucket/ssh_manifest.txt'
```
資訊清單檔案是 JSON 格式的文字檔案，供 Amazon Redshift 用來連接至主機。資訊清單檔案指定 SSH 主機端點，以及要在主機上執行以將資料傳回給 Amazon Redshift 的命令。您可以選擇在每個項目中包含主機公有金鑰、登入使用者名稱及 mandatory 旗標。下列範例顯示的資訊清單檔案會建立兩個 SSH 連線：  

```
{ 
    "entries": [ 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"}, 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"} 
     ] 
}
```
資訊清單檔案包含一個 `"entries"` 結構來含括每個 SSH 連線。您可以對單一主機建立多個連線，也可以對多台主機建立多個連線。如圖所示，欄位名稱和值都需要雙引號字元。引號字元必須是簡單引號 (0x22)，而不是斜向或「智慧型」引號。唯一不需要雙引號字元的值是 `"mandatory"` 欄位的布林值 `true` 或 `false`。  
下列清單描述資訊清單檔案中的欄位。    
端點  <a name="copy-ssh-manifest-endpoint"></a>
主機的 URL 地址或 IP 地址，例如 `"ec2-111-222-333.compute-1.amazonaws.com"` 或 `"198.51.100.0"`。  
command  <a name="copy-ssh-manifest-command"></a>
主機執行的命令，會產生文字輸出或 gzip、lzop、bzip2 或 zstd 格式的二進位輸出。命令可以是使用者 *"host\$1user\$1name"* 有許可執行的任何命令。命令可能像是列印檔案這麼簡單，也可能是查詢資料庫或啟動指令碼。輸出 (文字檔案、gzip 二進位檔案、lzop 二進位檔案，或 bzip2 二進位檔案) 必須是 Amazon Redshift COPY 命令可擷取的格式。如需詳細資訊，請參閱[準備您的輸入資料](t_preparing-input-data.md)。  
publickey  <a name="copy-ssh-manifest-publickey"></a>
(選用) 主機的公有金鑰。如果提供，Amazon Redshift 會使用公有金鑰來識別主機。如果未提供公有金鑰，Amazon Redshift 不會嘗試識別主機。例如，若遠端主機的公有金鑰是 `ssh-rsa AbcCbaxxx…Example root@amazon.com`，請在公有金鑰欄位中輸入下列文字：`"AbcCbaxxx…Example"`  
mandatory  <a name="copy-ssh-manifest-mandatory"></a>
(選用) 此子句指出如果嘗試連線失敗，COPY 命令是否就應該失敗。預設值為 `false`。如果 Amazon Redshift 未成功建立至少一個連線，則 COPY 命令會失敗。  
使用者名稱  <a name="copy-ssh-manifest-username"></a>
(選用) 用來登入主機系統並執行遠端命令的使用者名稱。使用者登入名稱與用來將 Amazon Redshift 叢集公有金鑰新增至主機授權金鑰檔案的登入必須相同。預設使用者名稱為 `redshift`。
如需建立資訊清單檔案的相關資訊，請參閱[載入資料程序](loading-data-from-remote-hosts.md#load-from-host-process)。  
若要從遠端主機進行 COPY，則必須使用 COPY 命令指定 SSH 參數。如果未指定 SSH 參數，COPY 會假設 FROM 指定的檔案是資料檔案，而且將會失敗。  
如果您使用自動壓縮，COPY 命令會執行兩次資料讀取操作，也就是會執行遠端命令兩次。第一次讀取操作會提供資料樣本進行壓縮分析，第二次讀取操作就會實際載入資料。如果遠端命令的兩次執行可能造成問題，請停用自動壓縮。若要停用自動壓縮，請在執行 COPY 命令時將 COMPUPDATE 參數設為 OFF。如需詳細資訊，請參閱[利用自動壓縮載入資料表](c_Loading_tables_auto_compress.md)。  
關於使用從 SSH COPY 的詳細程序，請參閱[從遠端主機載入資料](loading-data-from-remote-hosts.md)。

*authorization*  
COPY 命令需要取得授權來存取另一個 AWS 資源中 (包括在 Amazon S3、Amazon EMR、Amazon DynamoDB 和 Amazon EC2 中) 的資料。您可以參考連接至叢集的 AWS Identity and Access Management (IAM) 角色 （以角色為基礎的存取控制），或提供使用者的存取憑證 （以金鑰為基礎的存取控制），以提供該授權。為了提高安全性和彈性，建議使用 IAM 角色型存取控制。如需詳細資訊，請參閱[授權參數](copy-parameters-authorization.md)。

SSH  <a name="copy-ssh"></a>
此子句指定從使用 SSH 通訊協定的遠端主機載入資料。如果指定 SSH，則還必須使用 [s3://copy_from_ssh_manifest_file](#copy-ssh-manifest) 引數提供資訊清單檔案。  
如果您使用 SSH 從位在遠端 VPC 使用私有 IP 地址的主機複製，該 VPC 必須已啟用增強型 VPC 路由。如需增強型 VPC 路由的相關資訊，請參閱 [Amazon Redshift 增強型 VPC 路由](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)。

## 選用的參數
<a name="copy-parameters-data-source-ssh-optional-parms"></a>

從 SSH COPY 時，您可以選擇性指定下列參數：
+ [欄映射選項](copy-parameters-column-mapping.md)
+ [資料格式參數](copy-parameters-data-format.md#copy-data-format-parameters)
+ [資料轉換參數](copy-parameters-data-conversion.md)
+ [資料載入操作](copy-parameters-data-load.md)

## 不支援的參數
<a name="copy-parameters-data-source-ssh-unsupported-parms"></a>

從 SSH COPY 時，您不能使用下列參數：
+ ENCRYPTED
+ MANIFEST
+ READRATIO

# 從 Amazon DynamoDB 進行 COPY
<a name="copy-parameters-data-source-dynamodb"></a>

若要從現有的 DynamoDB 資料表載入資料，請使用 FROM 子句來指定 DynamoDB 資料表名稱。

**Topics**
+ [語法](#copy-parameters-data-source-dynamodb-syntax)
+ [範例](#copy-parameters-data-source-dynamodb-examples)
+ [選用的參數](#copy-parameters-data-source-dynamodb-optional-parms)
+ [不支援的參數](#copy-parameters-data-source-dynamodb-unsupported-parms)

**重要**  
如果 DynamoDB 資料表所在區域與 Amazon Redshift 叢集的區域不是同一個，您必須使用 REGION 參數來指定資料所在的區域。

## 語法
<a name="copy-parameters-data-source-dynamodb-syntax"></a>

```
FROM 'dynamodb://table-name' 
authorization
READRATIO ratio
| REGION [AS] 'aws_region'  
| optional-parameters
```

## 範例
<a name="copy-parameters-data-source-dynamodb-examples"></a>

下列範例從 DynamoDB 資料表載入資料。

```
copy favoritemovies from 'dynamodb://ProductCatalog'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
readratio 50;
```

### Parameters
<a name="copy-parameters-data-source-dynamodb-parameters"></a>

FROM  
載入的資料來源。

'dynamodb://*table-name*'  <a name="copy-dynamodb"></a>
包含資料之 DynamoDB 資料表的名稱，例如 `'dynamodb://ProductCatalog'`。如需 DynamoDB 屬性如何映射至 Amazon Redshift 欄的詳細資訊，請參閱[從 Amazon DynamoDB 資料表載入資料](t_Loading-data-from-dynamodb.md)。  
DynamoDB 資料表名稱對 AWS 帳戶是唯一的，由 AWS 存取憑證識別。

*authorization*  
COPY 命令需要取得授權來存取另一個 AWS 資源中 (包括在 Amazon S3、Amazon EMR、DynamoDB 和 Amazon EC2 中) 的資料。您可以參考連接至叢集的 AWS Identity and Access Management (IAM) 角色 （以角色為基礎的存取控制），或提供使用者的存取憑證 （以金鑰為基礎的存取控制），以提供該授權。為了提高安全性和彈性，建議使用 IAM 角色型存取控制。如需詳細資訊，請參閱[授權參數](copy-parameters-authorization.md)。

READRATIO [AS] *比率*  <a name="copy-readratio"></a>
DynamoDB 資料表的佈建輸送量中用於資料載入的百分比。從 DynamoDB 的 COPY 需要 READRATIO。此項目不能用於從 Amazon S3 的 COPY。強烈建議將此比率設定為小於平均未用佈建輸送量的值。有效值為整數 1–200。  
將 READRATIO 設為 100 或更高會使 Amazon Redshift 完全耗盡 DynamoDB 資料表的佈建輸送量，導致 COPY 工作階段期間對相同資料表同時執行的讀取操作效能嚴重降低。寫入流量不受影響。在 Amazon Redshift 無法滿足資料表的佈建輸送量的罕見情況下，允許使用高於 100 的值來排解此問題。如果您持續從 DynamoDB 將資料載入 Amazon Redshift，請考慮以時間序列來組織 DynamoDB 資料表，以分隔來自 COPY 操作的即時流量。

## 選用的參數
<a name="copy-parameters-data-source-dynamodb-optional-parms"></a>

從 Amazon DynamoDB COPY 時，您可以選擇性指定下列參數：
+ [欄映射選項](copy-parameters-column-mapping.md)
+ 支援下列資料轉換參數：
  + [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate) 
  + [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull) 
  + [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat) 
  + [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull) 
  + [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) 
  + [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat) 
  + [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks) 
  + [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns) 
+ [資料載入操作](copy-parameters-data-load.md)

## 不支援的參數
<a name="copy-parameters-data-source-dynamodb-unsupported-parms"></a>

從 DynamoDB COPY 時，您不能使用下列參數：
+ 所有資料格式參數
+ ESCAPE
+ FILLRECORD
+ IGNOREBLANKLINES
+ IGNOREHEADER
+ NULL
+ REMOVEQUOTES
+ ACCEPTINVCHARS
+ MANIFEST
+ ENCRYPTED

# 授權參數
<a name="copy-parameters-authorization"></a>

COPY 命令需要授權才能存取其他 AWS 資源中的資料，包括 Amazon S3、Amazon EMR、Amazon DynamoDB 和 Amazon EC2。您可以透過參考附加到叢集的 [AWS Identity and Access Management (IAM) 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 來提供此授權 (*角色型存取控制*)。您可以在 Amazon S3 上加密載入資料。

下列主題提供身分驗證選項的詳細資訊和範例：
+ [COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)
+ [角色類型存取控制](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)
+ [金鑰型存取控制](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based)

使用下列其中一項來提供 COPY 命令的授權：
+ [使用 IAM\$1ROLE 參數](#copy-iam-role) 參數
+ [使用 ACCESS\$1KEY\$1ID 和 SECRET\$1ACCESS\$1KEY 參數](#copy-access-key-id) 參數
+ [使用 CREDENTIALS 參數](#copy-credentials) 子句

## 使用 IAM\$1ROLE 參數
<a name="copy-iam-role"></a>

### IAM\$1ROLE
<a name="copy-iam-role-iam"></a>

使用預設關鍵字，讓 Amazon Redshift 使用設定為預設值並在 COPY 命令執行時與叢集關聯的 IAM 角色。

對叢集進行身分驗證和授權時所使用的 IAM 角色使用 Amazon Resource Name (ARN)。如果指定 IAM\$1ROLE，則不能使用 ACCESS\$1KEY\$1ID 和 SECRET\$1ACCESS\$1KEY、SESSION\$1TOKEN 或 CREDENTIALS。

以下顯示 IAM\$1ROLE 參數的語法。

```
IAM_ROLE { default | 'arn:aws:iam::<AWS 帳戶-id>:role/<role-name>' }
```

如需詳細資訊，請參閱[角色類型存取控制](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)。

## 使用 ACCESS\$1KEY\$1ID 和 SECRET\$1ACCESS\$1KEY 參數
<a name="copy-access-key-id"></a>

### ACCESS\$1KEY\$1ID、SECRET\$1ACCESS\$1KEY
<a name="copy-access-key-id-access"></a>

不建議使用此授權方法。

**注意**  
除了以純文字提供存取登入資料，強烈建議指定 IAM\$1ROLE 參數來使用角色型身分驗證。如需詳細資訊，請參閱[角色類型存取控制](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)。

### SESSION\$1TOKEN
<a name="copy-token"></a>

用於暫時存取登入資料的工作階段字符。指定 SESSION\$1TOKEN 時，您還必須使用 ACCESS\$1KEY\$1ID 和 SECRET\$1ACCESS\$1KEY 來提供暫時存取金鑰登入資料。如果指定 SESSION\$1TOKEN，則不能使用 IAM\$1ROLE 或 CREDENTIALS。如需詳細資訊，請參閱《IAM 使用者指南》中的[暫時安全憑證](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials)。

**注意**  
除了建立暫時安全登入資料，強烈建議使用角色型身分驗證。使用 IAM 角色來授權時，Amazon Redshift 會自動為每個工作階段建立暫時使用者憑證。如需詳細資訊，請參閱[角色類型存取控制](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)。

以下顯示 SESSION\$1TOKEN 參數及 ACCESS\$1KEY\$1ID 和 SECRET\$1ACCESS\$1KEY 參數的語法。

```
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>'
SESSION_TOKEN '<temporary-token>';
```

如果指定 SESSION\$1TOKEN，則不能使用 CREDENTIALS 或 IAM\$1ROLE。

## 使用 CREDENTIALS 參數
<a name="copy-credentials"></a>

### CREDENTIALS
<a name="copy-credentials-cred"></a>

子句，指出您的叢集在存取包含資料檔案或資訊清單檔案的其他 AWS 資源時將使用的方法。CREDENTIALS 參數不能與 IAM\$1ROLE 或 ACCESS\$1KEY\$1ID 和 SECRET\$1ACCESS\$1KEY 一起使用。

以下顯示 CREDENTIALS 參數的語法。

```
[WITH] CREDENTIALS [AS] 'credentials-args'
```

**注意**  
若要提高彈性，建議使用 [IAM\$1ROLE](#copy-iam-role-iam) 參數，而不是 CREDENTIALS 參數。

(選用) 如果使用 [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) 參數，則 *credentials-args* 字串也提供加密金鑰。

*credentials-args* 字串區分大小寫，且不得包含空格。

關鍵字 WITH 和 AS 是選用的且會被忽略。

您可指定為 [role-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based.phrase) 或 [key-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based.phrase)。在任一情況下，IAM 角色或使用者必須具有存取指定之 AWS 資源所需的許可。如需詳細資訊，請參閱[COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)。

**注意**  
為了保護您的 AWS 登入資料和保護敏感資料，我們強烈建議使用角色型存取控制。

若要指定角色型存取控制，請依下列格式提供 *credentials-args* 字串。

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

若要使用暫時字符登入資料，您必須提供暫時存取金鑰 ID、暫時私密存取金鑰及暫時字符。*credentials-args* 字串採用下列格式。

```
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>'
```

使用角色型存取控制搭配臨時憑證的 COPY 命令類似下列範例陳述式：

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key-id>;token=<temporary-token>'
```

 如需詳細資訊，請參閱[暫時安全憑證](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials)。

如果使用 [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) 參數，則 *credentials-args* 字串採用下列格式，其中 *<root-key>* 是用於加密檔案之根金鑰的值。

```
CREDENTIALS
'<credentials-args>;master_symmetric_key=<root-key>'
```

使用角色型存取控制搭配加密金鑰的 COPY 命令類似下列範例陳述式：

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS 
'aws_iam_role=arn:aws:iam::<account-id>:role/<role-name>;master_symmetric_key=<root-key>'
```

# 欄映射選項
<a name="copy-parameters-column-mapping"></a>

根據預設，COPY 會依欄位在資料檔案中出現的同樣順序，將值插入目標資料表的欄。如果預設欄順序不適用，您可以指定欄清單或使用 JSONPath 表達式，將來源資料欄位映射至目標欄。
+ [Column List](#copy-column-list)
+ [JSONPaths File](#copy-column-mapping-jsonpaths)

## 資料欄清單
<a name="copy-column-list"></a>

您可以指定逗號分隔的欄名稱清單，以便將來源資料欄位載入特定的目標欄。COPY 陳述式中的欄可以是任何順序，但從純文字檔 (例如 Amazon S3 儲存貯體) 載入時，欄的順序必須符合來源資料的順序。

從 Amazon DynamoDB 資料表載入時，順序並不重要。COPY 命令會將擷取自 DynamoDB 資料表之項目中的屬性名稱，與 Amazon Redshift 資料表中的欄名稱進行比對。如需詳細資訊，請參閱[從 Amazon DynamoDB 資料表載入資料](t_Loading-data-from-dynamodb.md)

 欄清單的格式如下。

```
COPY tablename (column1 [,column2, ...]) 
```

如果從欄清單中省略目標資料表的某一欄，COPY 會載入目標欄的 [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) 表達式。

如果目標欄沒有預設值，COPY 會嘗試載入 NULL。

如果 COPY 嘗試將 NULL 指派給定義為 NOT NULL 的欄，COPY 命令會失敗。

如果欄清單包含 [IDENTITY](r_CREATE_TABLE_NEW.md#identity-clause) 欄，則還必須指定 [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids)；如果 IDENTITY 欄遭省略，則不能指定 EXPLICIT\$1IDS。如果未指定欄清單，則命令的行為會如同已指定完整、按順序的欄清單一樣，而如果也未指定 EXPLICIT\$1IDS，則會 IDENTITY 欄會遭到省略。

如果資料欄是使用 GENERATED BY DEFAULT AS IDENTITY 定義的，則可以複製它。值是利用您提供的值來產生或更新。EXPLICIT\$1IDS 不是必要選項。COPY 不會更新身分高浮水印。如需詳細資訊，請參閱[GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause)。

## JSONPaths 檔案
<a name="copy-column-mapping-jsonpaths"></a>

從 JSON 或 Avro 格式的資料檔案載入時，COPY 會自動將 JSON 或 Avro 來源資料中的資料元素映射至目標資料表的欄。它會比對 Avro 結構定義中的欄位名稱與目標資料表或欄清單中的欄名稱，以達到這個目標。

在某些情況下，您的欄名稱和欄位名稱不相符，或者您需要映射至資料階層中的更深層級。在這些情況下，您可以使用 JSONPaths 檔案將 JSON 或 Avro 資料元素明確地映射至欄。

如需詳細資訊，請參閱[JSONPaths 檔案](copy-parameters-data-format.md#copy-json-jsonpaths)。

# 資料格式參數
<a name="copy-parameters-data-format"></a>

根據預設，COPY 命令會預期來源資料是字元分隔的 UTF-8 文字。預設分隔符號是縱線字元 ( \$1 )。如果來源資料是其他格式，請使用下列參數來指定資料格式：
+ [FORMAT](#copy-format)
+ [CSV](#copy-csv)
+ [DELIMITER](#copy-delimiter) 
+ [FIXEDWIDTH](#copy-fixedwidth) 
+ [SHAPEFILE](#copy-shapefile) 
+ [AVRO](#copy-avro) 
+ [JSON format for COPY](#copy-json) 
+ [PARQUET](#copy-parquet) 
+ [ORC](#copy-orc) 

從 Amazon S3 COPY 時，除了標準資料格式，COPY 還支援下列單欄資料格式：
+ [ORC](#copy-orc) 
+ [PARQUET](#copy-parquet) 

支援從單欄格式進行 COPY，但有某些限制。如需詳細資訊，請參閱[從單欄資料格式 COPY](copy-usage_notes-copy-from-columnar.md)。<a name="copy-data-format-parameters"></a>資料格式參數

FORMAT [AS]  <a name="copy-format"></a>
(選用) 識別資料格式關鍵字。FORMAT 引數描述如下。

CSV [ QUOTE [AS] *'quote\$1character'* ]  <a name="copy-csv"></a>
在輸入資料中啟用 CSV 格式。若要自動逸出分隔符號、新行字元及換行字元，請以 QUOTE 參數指定的字元來括住欄位。預設引號字元為雙引號 ( " )。在欄位內使用引號字元時，請多加一個引號字元來逸出此字元。例如，假設引號字元是雙引號，若要插入 `A "quoted" word` 字串，則輸入檔案應該包含 `"A ""quoted"" word"` 字串。使用 CSV 參數時，預設分隔字元為逗號 ( , )。您可以使用 DELIMITER 參數來指定不同的分隔字元。  
以引號括住欄位時，分隔字元和引號字元之間的空格會被忽略。如果分隔字元是空格字元 (例如 Tab 字元)，則不會將分隔字元視為空格。  
CSV 不能與 FIXEDWIDTH、REMOVEQUOTES 或 ESCAPE 一起使用。    
QUOTE [AS] *'quote\$1character'*  <a name="copy-csv-quote"></a>
選用。指定字元做為使用 CSV 參數時的引號字元。預設值為雙引號 ( " )。如果使用 QUOTE 參數來定義雙引號以外的引號字元，則不需要在欄位內逸出雙引號。QUOTE 參數只能與 CSV 參數一起使用。AS 關鍵字為選用。

DELIMITER [AS] ['*delimiter\$1char*']   <a name="copy-delimiter"></a>
指定用來分隔輸入檔案中不同欄位的字元，例如縱線字元 (`|`)、逗號 (`,`) 或 Tab (`\t`)，或是指定多個字元，例如 `|~|`。支援非列印字元。字元也可以用八進位表示，如其 UTF-8 字碼單位。採用八進位時，請使用格式 '\$1ddd'，其中 'd' 是八進位數字 (0-7)。預設分隔字元為縱線字元 (`|`)，除非使用 CSV 參數 (在此情況下，預設分隔字元為逗號 (`,`)。AS 關鍵字為選用。DELIMITER 不能與 FIXEDWIDTH 一起使用。

FIXEDWIDTH '*fixedwidth\$1spec*'  <a name="copy-fixedwidth"></a>
從每個欄寬是固定長度 (而不是以分隔字元隔開的欄) 的檔案載入資料。*fixedwidth\$1spec* 是字串，指定使用者定義的欄標籤和欄寬。欄標籤可以是文字字串或整數 (視使用者的選擇而定)。欄標籤與欄名稱無關。標籤/寬度配對的順序必須完全符合資料表欄的順序。FIXEDWIDTH 不能與 CSV 或 DELIMITER 一起使用。在 Amazon Redshift 中，CHAR 和 VARCHAR 欄的長度以位元組表示，因此在準備要載入的檔案時，請確保您指定的欄寬可容納多位元組字元的二進位長度。如需詳細資訊，請參閱[字元類型](r_Character_types.md)。  
*fixedwidth\$1spec* 的格式如下所示：  

```
'colLabel1:colWidth1,colLabel:colWidth2, ...'
```

SHAPEFILE [ SIMPLIFY [AUTO] [*'tolerance'*] ]  <a name="copy-shapefile"></a>
在輸入資料中啟用 SHAPEFILE 格式。依預設，Shapefile 的第一欄是 `GEOMETRY` 或 `IDENTITY` 欄。所有後續的欄都遵循 Shapefile 中指定的順序。  
您不能使用具有 FIXEDWIDTH、REMOVEQUOTES 或 ESCAPE 的 SHAPEFILE。  
若要搭配 `GEOGRAPHY` 物件使用 `COPY FROM SHAPEFILE`，請先擷取至 `GEOMETRY` 欄中，然後將物件轉換為 `GEOGRAPHY` 物件。    
SIMPLIFY [*tolerance*]  <a name="copy-shapefile-simplify"></a>
(選用) 使用 Ramer-Douglas-Peucker 演算法和指定的公差，簡化擷取過程中的所有幾何。  
SIMPLIFY AUTO [*tolerance*]  <a name="copy-shapefile-simplify"></a>
(選用) 僅簡化大於最大幾何大小的幾何。此簡化使用 Ramer-Douglas-Peucker 演算法和自動計算的公差 (如果未超過指定的公差)。此演算法會在指定公差內計算儲存物件的大小。*tolerance* 值是選用的。
如需載入 Shapefile 的範例，請參閱 [將 Shapefile 載入 Amazon Redshift](r_COPY_command_examples.md#copy-example-spatial-copy-shapefile)。

AVRO [AS] '*avro\$1option*'  <a name="copy-avro"></a>
指定來源資料是 Avro 格式。  
從這些服務和通訊協定進行 COPY 時，支援 Avro 格式：  
+ Amazon S3 
+ Amazon EMR 
+ 遠端主機 (SSH) 
從 DynamoDB 進行 COPY 時不支援 Avro。  
Avro 是資料序列化通訊協定。Avro 來源檔案包含結構描述來定義資料的結構。Avro 結構描述類型必須是 `record`。COPY 接受使用預設未壓縮解碼器及 `deflate` 和 `snappy` 壓縮解碼器建立的 Avro 檔案。如需 Avro 的相關資訊，請前往 [Apache Avro](https://avro.apache.org/)。  
*avro\$1option* 的有效值如下所示：  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
預設值為 `'auto'`。  
COPY 會自動將 Avro 來源資料中的資料元素映射至目標資料表中的欄。它會比對 Avro 結構描述中的欄位名稱與目標資料表中的欄名稱。`'auto'` 的比對區分大小寫，而 `'auto ignorecase'` 的比對不區分大小寫。  
Amazon Redshift 資料表中的欄名稱一律為小寫，因此當您使用 `'auto'` 選項時，相符欄位名稱也必須是小寫。如果欄位名稱並非全部小寫，您可以使用 `'auto ignorecase'` 選項。使用預設 `'auto'` 引數，COPY 只會識別結構中的第一層欄位 (或*外部欄位*)。  
若要將欄名稱明確映射至 Avro 欄位名稱，您可以使用 [JSONPaths 檔案](#copy-json-jsonpaths)。  
根據預設，COPY 會嘗試將目標資料表中的所有欄與 Avro 欄位名稱進行比對。若要載入欄子集，您可以選擇性指定欄清單。如果從欄清單中省略目標資料表的某一欄，COPY 會載入目標欄的 [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) 運算式。如果目標欄沒有預設值，COPY 會嘗試載入 NULL。如果某一欄出現在欄清單中，且 COPY 在 Avro 資料中找不到相符欄位，則 COPY 會嘗試將 NULL 載入此欄。  
如果 COPY 嘗試將 NULL 指派給定義為 NOT NULL 的欄，COPY 命令會失敗。  
<a name="copy-avro-schema"></a>**Avro 結構描述**  
Avro 來源資料檔案包含結構描述來定義資料的結構。COPY 會讀取 Avro 來源資料檔案中的結構描述，以便將資料元素映射至目標資料表欄。下列範例顯示 Avro 結構描述。  

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"}]
}
```
Avro 結構描述定義方式是 JSON 格式。最上層 JSON 物件包含三個名稱值對，包含名稱 (或*金鑰*)、`"name"`、`"type"` 和 `"fields"`。  
內含物件陣列的 `"fields"` 金鑰對會定義資料結構中每個欄位的名稱和資料類型。根據預設，COPY 會自動將欄位名稱與欄名稱進行比對。欄名稱一律為小寫，因此相符的欄位名稱也必須是小寫，除非您指定 `‘auto ignorecase’` 選項。不符合欄名稱的任何欄位名稱會被忽略。順序並不重要。在上述範例中，COPY 映射至欄名稱 `id`、`guid`、`name` 和 `address`。  
使用預設的 `'auto'` 引數時，COPY 只會將第一層物件與欄進行比對。若要映射至結構描述中更深的層級，或欄位名稱和欄名稱不相符，請使用 JSONPaths 檔案來定義映射。如需詳細資訊，請參閱[JSONPaths 檔案](#copy-json-jsonpaths)。  
如果與金鑰相關聯的值是複合 Avro 資料類型 (例如位元組、陣列、記錄、映射或連結)，COPY 會以字串形式載入值。在這裡，字串是資料的 JSON 表示法。COPY 會以字串形式載入 Avro 列舉資料類型，其中內容是類型的名稱。如需範例，請參閱 [從 JSON 格式 COPY](copy-usage_notes-copy-from-json.md)。  
Avro 檔案標頭 (包括結構描述和檔案中繼資料) 的大小上限為 1 MB。    
單一 Avro 資料區塊的大小上限為 4 MB。這不同於資料列大小上限。如果超過單一 Avro 資料區塊的大小上限，即使產生的資料列小於 4 MB 資料列大小限制，COPY 命令也會失敗。  
在計算列大小時，Amazon Redshift 會在內部將縱線字元 ( \$1 ) 計算兩次。如果輸入資料包含非常多的縱線字元，即使資料區塊小於 4 MB，資料列大小仍可能超過 4 MB。

JSON [AS] '*json\$1option*'  <a name="copy-json"></a>
來源資料是 JSON 格式。  
從這些服務和通訊協定 COPY 時，支援 JSON 格式：  
+ Amazon S3
+ 從 Amazon EMR 進行 COPY
+ 從 SSH COPY
從 DynamoDB 進行 COPY 時不支援 JSON。  
*json\$1option* 的有效值如下所示：  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
+ `'noshred'` 
預設值為 `'auto'`。載入 JSON 文件時，Amazon Redshift 不會將 JSON 結構的屬性分解為多個欄。  
根據預設，COPY 會嘗試將目標資料表中的所有欄與 JSON 欄位名稱金鑰配對。若要載入欄子集，您可以選擇性指定欄清單。如果 JSON 欄位名稱金鑰不是全部小寫，您可以使用 `'auto ignorecase'` 選項或 [JSONPaths 檔案](#copy-json-jsonpaths)，明確地將欄名稱映射至 JSON 欄位名稱金鑰。  
如果從欄清單中省略目標資料表的某一欄，COPY 會載入目標欄的 [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) 表達式。如果目標欄沒有預設值，COPY 會嘗試載入 NULL。如果某一欄出現在欄清單中，且 COPY 在 JSON 資料中找不到相符欄位，則 COPY 會嘗試將 NULL 載入此欄。  
如果 COPY 嘗試將 NULL 指派給定義為 NOT NULL 的欄，COPY 命令會失敗。  
COPY 會將 JSON 來源資料中的資料元素映射至目標資料表的欄。它會將來源名稱值對中的*物件金鑰* (或名稱) 比對目標資料表中的欄名稱來達成此目標。  
請參閱每個 *json\$1option* 值的下列詳細資訊：    
'auto'  <a name="copy-json-auto"></a>
使用此選項，比對會區分大小寫。Amazon Redshift 資料表中的欄名稱一律為小寫，當您使用 `'auto'` 選項時，相符的 JSON 欄位名稱也必須是小寫。  
'auto ignorecase'  <a name="copy-json-auto-ignorecase"></a>
使用此選項，比對不會區分大小寫。Amazon Redshift 資料表中的欄名稱一律為小寫，因此，當您使用 `'auto ignorecase'` 選項時，對應的 JSON 欄位名稱可以是小寫、大寫或大小寫混合。  
's3://*jsonpaths\$1file*'  <a name="copy-json-pathfile"></a>
使用此選項，COPY 會使用指名的 JSONPaths 檔案，將 JSON 來源資料中的資料元素映射至目標資料表的欄。*`s3://jsonpaths_file`* 引數必須是明確參考單一檔案的 Amazon S3 物件金鑰。例如 `'s3://amzn-s3-demo-bucket/jsonpaths.txt`'。引數不能是索引鍵字首。如需使用 JSONPaths 檔案的相關資訊，請參閱 [JSONPaths 檔案](#copy-json-jsonpaths)。  
在某些情況下，由 `jsonpaths_file` 指定的檔案具有與 `copy_from_s3_objectpath` 為資料檔指定的路徑相同的字首。如果是這樣，COPY 會將 JSONPaths 檔案讀取為資料檔案並傳回錯誤。例如，假設您的資料檔案使用物件路徑 `s3://amzn-s3-demo-bucket/my_data.json`，而您的 JsonPath 檔案是 `s3://amzn-s3-demo-bucket/my_data.jsonpaths`。在此情況下，COPY 會嘗試將 `my_data.jsonpaths` 載入為資料檔案。  
'noshred'  <a name="copy-json-noshred"></a>
使用此選項，在載入 JSON 文件時，Amazon Redshift 不會將 JSON 結構的屬性分解為多個欄。

## JSON 資料檔案
<a name="copy-json-data-file"></a>

JSON 資料檔案包含一組物件或陣列。COPY 會將每個 JSON 物件或陣列載入目標資料表中的每一列。對應到一列的每個物件或陣列必須是獨立的根層級結構；亦即，不能是另一個 JSON 結構的成員。

JSON *物件*的開頭和結尾是大括號  ( \$1 \$1 )，且包含一組未排序的名稱值對。每一對名稱和值以冒號分隔，而配對以逗號分隔。根據預設，名稱值對中的*物件金鑰* (或名稱) 必須符合資料表中相應欄的名稱。Amazon Redshift 資料表中的欄名稱一律為小寫，因此相符的 JSON 欄位名稱金鑰也必須是小寫。如果欄名稱與 JSON 金鑰不符，請使用 [JSONPaths 檔案](#copy-json-jsonpaths) 明確地將欄映射至金鑰。

JSON 物件中的順序並不重要。不符合欄名稱的任何名稱會被忽略。以下顯示簡易 JSON 物件的結構。

```
{
  "column1": "value1",
  "column2": value2,
  "notacolumn" : "ignore this value"
}
```

JSON *陣列* 的開頭和結尾是方括號 ( [ ] )，且包含一組已排序的值 (以逗號分隔)。如果資料檔案使用陣列，您必須指定 JSONPaths 檔案將值與欄配對。以下顯示簡易 JSON 陣列的結構。

```
["value1", value2]
```

JSON 必須格式正確。例如，不能以逗號或其他任何字元 (空格除外) 來分隔物件或陣列。必須以雙引號字元括住字串。引號字元必須是簡單引號 (0x22)，而不是斜向或「智慧型」引號。

單一 JSON 物件或陣列的大小上限 (包括大括號或方括號) 為 4 MB。這不同於資料列大小上限。如果超過單一 JSON 物件或陣列的大小上限，即使產生的資料列小於 4 MB 資料列大小限制，COPY 命令也會失敗。

在計算列大小時，Amazon Redshift 會在內部將縱線字元 ( \$1 ) 計算兩次。如果輸入資料包含非常多的縱線字元，即使物件小於 4 MB，資料列大小仍可能超過 4 MB。

COPY 會載入 `\n` 做為新行字元，也會載入 `\t` 做為 Tab 字元。若要載入反斜線，請加上反斜線 ( `\\` ) 來逸出。

COPY 會在指定的 JSON 來源中搜尋格式正確、有效的 JSON 物件或陣列。如果 COPY 在找到可用 JSON 結構之前或在有效的 JSON 物件或陣列之間遇到任何非空白字元，COPY 會針對每個例項傳回錯誤。這些錯誤都計入 MAXERROR 錯誤計數內。當錯誤計數等於或超過 MAXERROR 時，COPY 會失敗。

對於每個錯誤，Amazon Redshift 會在 STL\$1LOAD\$1ERRORS 系統資料表中記錄一列。LINE\$1NUMBER 欄會記錄造成錯誤之 JSON 物件的最後一行。

如果指定 IGNOREHEADER，COPY 會在 JSON 資料中忽略指定的行數。IGNOREHEADER 計算時一律計數 JSON 資料中的新行字元。

根據預設，COPY 會將空字串載入為空欄位。如果指定 EMPTYASNULL，COPY 會將 CHAR 和 VARCHAR 欄位的空字串載入為 NULL。一律會將其他資料類型 (例如 INT) 的空字串載入為 NULL。

JSON 不支援下列選項：
+ CSV
+ DELIMITER 
+ ESCAPE
+ FILLRECORD 
+ FIXEDWIDTH
+ IGNOREBLANKLINES
+ NULL AS
+ READRATIO
+ REMOVEQUOTES 

如需詳細資訊，請參閱[從 JSON 格式 COPY](copy-usage_notes-copy-from-json.md)。如需 JSON 資料結構的相關資訊，請前往 [www.json.org](https://www.json.org/)。

## JSONPaths 檔案
<a name="copy-json-jsonpaths"></a>

如果您從 JSON 格式或 Avro 來源資料載入，根據預設，COPY 預設會將來源資料中的第一層資料元素映射至目標資料表的欄。它會將名稱值對中的每個名稱 (或物件金鑰) 比對目標資料表中的欄名稱來達成此目標。

如果欄名稱和物件金鑰不符，或若要映射至資料階層中更深的層級，您可以使用 JSONPaths 檔案，以明確地將 JSON 或 Avro 資料元素映射至欄。JSONPaths 檔案會比對目標資料表或欄清單中的欄順序，以便將 JSON 資料元素映射至欄。

JSONPaths 檔案只能包含單一 JSON 物件 (不是陣列)。JSON 物件是名稱值對。*物件金鑰* (名稱值對中的名稱) 必須是 `"jsonpaths"`。名稱值對中的*值*是 *JSONPath 運算式*陣列。每個 JSONPath 表達式都參考 JSON 資料階層或 Avro 結構描述中的單一元素，類似於 XPath 表達式參考 XML 文件中元素的方式。如需詳細資訊，請參閱[JSONPath 表達式](#copy-json-jsonpath-expressions)。

若要使用 JSONPath 檔案，請將 JSON 或 AVRO 關鍵字加入 COPY 命令。使用下列格式指定 JSONPath 檔案的 S3 儲存貯體名稱和物件路徑。

```
COPY tablename 
FROM 'data_source' 
CREDENTIALS 'credentials-args' 
FORMAT AS { AVRO | JSON } 's3://jsonpaths_file';
```

`s3://jsonpaths_file` 值必須是明確參考單一檔案的 Amazon S3 物件金鑰，例如 `'s3://amzn-s3-demo-bucket/jsonpaths.txt'`。它不能是索引鍵字首。

在某些情況下，如果您是從 Amazon S3 載入，則 `jsonpaths_file` 指定的檔案具有與 `copy_from_s3_objectpath` 為資料檔指定的路徑相同的字首。如果是這樣，COPY 會將 JSONPaths 檔案讀取為資料檔案並傳回錯誤。例如，假設您的資料檔案使用物件路徑 `s3://amzn-s3-demo-bucket/my_data.json`，而您的 JsonPath 檔案是 `s3://amzn-s3-demo-bucket/my_data.jsonpaths`。在此情況下，COPY 會嘗試將 `my_data.jsonpaths` 載入為資料檔案。

 如果金鑰名稱是 `"jsonpaths"` 以外的任何字串，COPY 命令不會傳回錯誤，但會忽略 *jsonpaths\$1file*，並改用 `'auto'` 引數。

如果發生下列任何情形，COPY 命令會失敗：
+ JSON 格式不正確。
+ 有多個 JSON 物件。
+ 物件外面存在空格以外的任何字元。
+ 陣列元素是空字串或不是字串。

MAXERROR 不會套用至 JSONPaths 檔案。

即使指定 [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) 選項，也不可對 JSONPaths 檔案進行加密。

如需詳細資訊，請參閱[從 JSON 格式 COPY](copy-usage_notes-copy-from-json.md)。

## JSONPath 表達式
<a name="copy-json-jsonpath-expressions"></a>

JSONPaths 檔案使用 JSONPath 表達式將資料欄位映射至目標欄。每個 JSONPath 運算式都對應至 Amazon Redshift 目標資料表中的一欄。JSONPath 陣列元素的順序必須符合目標資料表或欄清單 (如果使用欄清單) 中的欄順序。

如圖所示，欄位名稱和值都需要雙引號字元。引號字元必須是簡單引號 (0x22)，而不是斜向或「智慧型」引號。

如果在 JSON 資料中找不到 JSONPath 表達式所參考的物件元素，COPY 會嘗試載入 NULL 值。如果參考的物件格式不正確，COPY 會傳回載入錯誤。

如果在 JSON 或 Avro 資料中找不到 JSONPath 表達式所參考的陣列元素，COPY 會失敗並傳回下列錯誤：`Invalid JSONPath format: Not an array or index out of range.` 請從 JSONPaths 中移除任何不存在於來源資料中的陣列元素，並確認來源資料中的陣列格式正確。  

JSONPath 運算式可以使用方括號標記法或點標記法，但您不能混用標記法。下列範例示範使用方括號標記法的 JSONPath 表達式。

```
{
    "jsonpaths": [
        "$['venuename']",
        "$['venuecity']",
        "$['venuestate']",
        "$['venueseats']"
    ]
}
```

下列範例示範使用點標記法的 JSONPath 表達式。

```
{
    "jsonpaths": [
        "$.venuename",
        "$.venuecity",
        "$.venuestate",
        "$.venueseats"
    ]
}
```

在 Amazon Redshift COPY 語法的內容中，JSONPath 運算式必須指定 JSON 或 Avro 階層式資料結構中單一名稱元素的明確路徑。Amazon Redshift 不支援任何可能解析為不明確路徑或多個名稱元素的 JSONPath 元素，例如萬用字元或篩選條件運算式。

如需詳細資訊，請參閱[從 JSON 格式 COPY](copy-usage_notes-copy-from-json.md)。

## 使用 JSONPaths 處理 Avro 資料
<a name="using-jsonpath-with-avro"></a>

下列範例示範多個層級的 Avro 結構描述。

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "isActive", "type": "boolean"},
        {"name": "age", "type": "int"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"},
        {"name": "latitude", "type": "double"},
        {"name": "longitude", "type": "double"},
        {
            "name": "tags",
            "type": {
                        "type" : "array",
                        "name" : "inner_tags",
                        "items" : "string"
                    }
        },
        {
            "name": "friends",
            "type": {
                        "type" : "array",
                        "name" : "inner_friends",
                        "items" : {
                                    "name" : "friends_record",
                                    "type" : "record",
                                    "fields" : [
                                                 {"name" : "id", "type" : "int"},
                                                 {"name" : "name", "type" : "string"}
                                               ]
                                  }
                    }
        },
        {"name": "randomArrayItem", "type": "string"}
    ]
}
```

下列範例示範一個 JSONPaths 檔案使用 AvroPath 表達式，來參考上面的結構描述。

```
{
    "jsonpaths": [
        "$.id",
        "$.guid",
        "$.address",
        "$.friends[0].id"
    ]
}
```

JSONPaths 範例包含下列元素：

jsonpaths  
JSON 物件的名稱，其中包含 AvroPath 表達式。

[ … ]  
方括號括住含有路徑元素的 JSON 陣列。

\$1  
貨幣符號表示 Avro 結構描述中的根元素，即 `"fields"` 陣列。

"\$1.id",  
AvroPath 表達式的目標。在此例子中，目標是 `"fields"` 陣列中名稱為 `"id"` 的元素。表達式以逗號分隔。

"\$1.friends[0].id"  
方括號表示陣列索引。JSONPath 表達式採用以零為基礎的索引，所以此表達式是參考 `"friends"` 陣列中名稱為 `"id"` 的第一個元素。

Avro 結構描述語法需要使用*內部欄位*來定義記錄和陣列資料類型的結構。AvroPath 表達式會忽略內部欄位。例如，欄位 `"friends"` 定義名為 `"inner_friends"` 的陣列，此陣列接著定義名為 `"friends_record"` 的記錄。參考欄位 `"id"` 的 AvroPath 表達式可以忽略額外欄位，而直接參考目標欄位。下列 AvroPath 表達式參考兩個屬於 `"friends"` 陣列的欄位。

```
"$.friends[0].id"
"$.friends[0].name"
```

## 單欄資料格式參數
<a name="copy-parameters-columnar-data"></a>

從 Amazon S3 COPY 時，除了標準資料格式，COPY 還支援下列單欄資料格式。支援從單欄格式 COPY，但有某些限制。如需詳細資訊，請參閱[從單欄資料格式 COPY](copy-usage_notes-copy-from-columnar.md)。

ORC  <a name="copy-orc"></a>
從採用「最佳化資料列單欄式 (ORC)」檔案格式的檔案載入資料。

PARQUET  <a name="copy-parquet"></a>
從採用 Parquet 檔案格式的檔案載入資料。

# 檔案壓縮參數
<a name="copy-parameters-file-compression"></a>

您可以指定下列參數，以便從壓縮資料檔案載入。檔案壓縮參數

BZIP2   <a name="copy-bzip2"></a>
此值指定一或多個 bzip2 壓縮格式的輸入檔案 (.bz2 檔案)。COPY 操作會讀取每個壓縮檔案，並於載入時將資料解壓縮。

GZIP   <a name="copy-gzip"></a>
此值指定一或多個 gzip 壓縮格式的輸入檔案 (.gz 檔案)。COPY 操作會讀取每個壓縮檔案，並於載入時將資料解壓縮。

LZOP   <a name="copy-lzop"></a>
此值指定一或多個 lzop 壓縮格式的輸入檔案 (.lzo 檔案)。COPY 操作會讀取每個壓縮檔案，並於載入時將資料解壓縮。  
COPY 不支援以 lzop *--filter* 選項壓縮的檔案。

ZSTD   <a name="copy-zstd"></a>
此值指定一或多個壓縮 Zstandard 格式的輸入檔案 (.zst 檔案)。COPY 操作會讀取每個壓縮檔案，並於載入時將資料解壓縮。  
ZSTD 僅支援從 Amazon S3 使用 COPY。

# 資料轉換參數
<a name="copy-parameters-data-conversion"></a>

COPY 載入資料表時會嘗試隱含地將來源資料中的字串轉換為目標欄的資料類型。如果您需要指定不同於預設行為的轉換，或預設轉換造成錯誤，您可以指定下列參數來管理資料轉換。如需這些參數語法的相關資訊，請參閱 [COPY 語法](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#r_COPY-syntax)。
+ [ACCEPTANYDATE](#copy-acceptanydate) 
+ [ACCEPTINVCHARS](#copy-acceptinvchars) 
+ [BLANKSASNULL](#copy-blanksasnull) 
+ [DATEFORMAT](#copy-dateformat) 
+ [EMPTYASNULL](#copy-emptyasnull) 
+ [ENCODING](#copy-encoding) 
+ [ESCAPE](#copy-escape) 
+ [EXPLICIT_IDS](#copy-explicit-ids) 
+ [FILLRECORD](#copy-fillrecord) 
+ [IGNOREBLANKLINES](#copy-ignoreblanklines) 
+ [IGNOREHEADER](#copy-ignoreheader) 
+ [NULL AS](#copy-null-as) 
+ [REMOVEQUOTES](#copy-removequotes) 
+ [ROUNDEC](#copy-roundec) 
+ [TIMEFORMAT](#copy-timeformat) 
+ [TRIMBLANKS](#copy-trimblanks) 
+ [TRUNCATECOLUMNS](#copy-truncatecolumns) <a name="copy-data-conversion-parameters"></a>資料轉換參數

ACCEPTANYDATE   <a name="copy-acceptanydate"></a>
允許載入任何日期格式而不會產生錯誤，包括無效格式，例如 `00/00/00 00:00:00`。此參數僅適用於 TIMESTAMP 和 DATE 欄。ACCEPTANYDATE 一定要與 DATEFORMAT 參數一起使用。如果資料的日期格式不符合 DATEFORMAT 規格，Amazon Redshift 會在該欄位中插入 NULL 值。

ACCEPTINVCHARS [AS] ['*replacement\$1char*']   <a name="copy-acceptinvchars"></a>
即使資料包含無效 UTF-8 字元，也允許將資料載入 VARCHAR 欄。指定 ACCEPTINVCHARS 時，COPY 會以 *replacement\$1char* 指定之字元所組成相同長度的字串，取代每個無效 UTF-8 字元。例如，假設替換字元是 '`^`'，則會以 '`^^^`' 取代無效的三位元組字元。  
 替換字元可以是 NULL 除外的任何 ASCII 字元。預設值為問號 ( ? )。如需無效 UTF-8 字元的相關資訊，請參閱[多位元組字元載入錯誤](multi-byte-character-load-errors.md)。  
COPY 會傳回包含無效 UTF-8 字元的列數，並針對每個受影響的列，在 [STL\$1REPLACEMENTS](r_STL_REPLACEMENTS.md) 系統資料表中新增一筆項目，而每個節點配量最多 100 列。也會取代其他無效 UTF-8 字元，但不會記錄那些取代事件。  
如果不指定 ACCEPTINVCHARS，COPY 只要遇到無效 UTF-8 字元就會傳回錯誤。  
ACCEPTINVCHARS 僅適用於 VARCHAR 欄。

BLANKSASNULL   <a name="copy-blanksasnull"></a>
將只包含空格字元的空白欄位載入為 NULL。此選項僅適用於 CHAR 和 VARCHAR 欄。一律會將其他資料類型 (例如 INT) 的空白欄位載入為 NULL。例如，會將包含連續三個空白字元 (沒有其他任何字元) 的字串載入為 NULL。預設行為 (不使用此選項時) 是依原狀載入空白字元。

DATEFORMAT [AS] \$1'*dateformat\$1string*' \$1 'auto' \$1  <a name="copy-dateformat"></a>
如果不指定 DATEFORMAT，則預設格式為 `'YYYY-MM-DD'`。例如，另一種有效格式為 `'MM-DD-YYYY'`。  
如果 COPY 命令無法辨識日期或時間值的格式，或者，日期或時間值使用不同的格式，請使用 `'auto'` 引數來搭配 DATEFORMAT 或 TIMEFORMAT 參數。`'auto'` 引數可以辨識使用 DATEFORMAT 和 TIMEFORMAT 字串時不支援的多種格式。`'auto'` 關鍵字區分大小寫。如需詳細資訊，請參閱[對 DATEFORMAT 和 TIMEFORMAT 使用自動辨識](automatic-recognition.md)。  
日期格式可以包含時間資訊 (時、分、秒)，但此資訊會遭到忽略。AS 關鍵字為選用。如需詳細資訊，請參閱[DATEFORMAT 和 TIMEFORMAT 字串範例](r_DATEFORMAT_and_TIMEFORMAT_strings.md)。

EMPTYASNULL   <a name="copy-emptyasnull"></a>
指出 Amazon Redshift 應該將空的 CHAR 和 VARCHAR 欄位載入為 NULL。其他資料類型 (例如 INT) 的空欄位一律載入為 NULL。當資料包含連續兩個分隔符號，且分隔符號之間沒有字元時，就形成空欄位。EMPTYASNULL 和 NULL AS '' (空字串) 會引起相同的行為。

ENCODING [AS] *file\$1encoding*  <a name="copy-encoding"></a>
指定載入資料的編碼類型。COPY 命令會於載入期間將資料從指定的編碼轉換為 UTF-8。  
*file\$1encoding* 的有效值如下所示：  
+ `UTF8`
+ `UTF16`
+ `UTF16LE`
+ `UTF16BE`
+ `ISO88591`
預設值為 `UTF8`。  
來源檔案名稱必須使用 UTF-8 編碼。  
即使對載入資料指定不同的編碼，下列檔案仍必須使用 UTF-8 編碼：  
+ 資訊清單檔案
+ JSONPaths 檔案
下列參數隨附的引數字串必須使用 UTF-8：  
+ FIXEDWIDTH '*fixedwidth\$1spec*'
+ ACCEPTINVCHARS '*replacement\$1char*'
+ DATEFORMAT '*dateformat\$1string*'
+ TIMEFORMAT '*timeformat\$1string*'
+ NULL AS '*null\$1string*'
固定寬度資料檔案必須使用 UTF-8 編碼。欄位寬度是根據字元數，而不是位元組數。  
所有載入資料必須使用指定的編碼。如果 COPY 遇到不同的編碼，則會略過檔案並傳回錯誤。  
如果您指定 `UTF16`，則資料必須有位元組順序標記 (BOM)。如果知道您的 UTF-16 資料是位元組由小到大 (LE) 或位元組由大到小 (BE)，則不論是否有 BOM，您都可以使用 `UTF16LE` 或 `UTF16BE`。  
若要使用 ISO-8859-1 編碼，請指定 `ISO88591`。如需詳細資訊，請參閱*維基百科*中的 [ISO/IEC 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1)。

ESCAPE   <a name="copy-escape"></a>
指定此參數時，輸入資料中的反斜線字元 (`\`) 就視為逸出字元。反斜線字元後面緊接的字元即使通常做為特殊用途，一樣會載入資料表中成為目前欄值的一部分。例如，當分隔符號字元、引號、內嵌的換行符號字元或逸出字元本身是欄值的正當部分時，您可以使用此參數來逸出這些字元。  
如果同時指定 ESCAPE 參數和 REMOVEQUOTES 參數，您可以逸出並保留原本可能移除的引號 (`'` 或 `"`)。預設 null 字串 (`\N`) 不受影響，但也可以在輸入資料中以 `\\N` 逸出。只要不以 NULL AS 參數指定替代 null 字串，`\N` 和 `\\N` 會產生相同的結果。  
控制字元 `0x00` (NUL) 不能逸出，應該從輸入資料中移除或轉換。此字元視為記錄結束 (EOR) 標記，用於截斷記錄的剩餘部分。
您不能對 FIXEDWIDTH 載入使用 ESCAPE 參數，也不可指定逸出字元本身；逸出字元一律為反斜線字元。您還必須確定輸入資料包含的逸出字元是在適當的位置。  
以下一些範例示範輸入資料，以及指定 ESCAPE 參數時載入的資料結果。第 4 列的結果假設也指定 REMOVEQUOTES 參數。輸入資料由縱線分隔的兩個欄位組成：  

```
1|The quick brown fox\[newline]
jumped over the lazy dog.
2| A\\B\\C
3| A \| B \| C
4| 'A Midsummer Night\'s Dream'
```
載入第 2 欄的資料如下所示：  

```
The quick brown fox
jumped over the lazy dog.
A\B\C
A|B|C
A Midsummer Night's Dream
```
使用者必須負責將逸出字元套用至載入的輸入資料。當您重新載入先前以 ESCAPE 參數來卸載的資料時，此規定就沒有必要。在此情況下，資料一定包含必要的逸出字元。
ESCAPE 參數不會解譯八進位、十六進位、Unicode 或其他逸出序列標記法。例如，假設來源資料包含八進位換行值 (`\012`)，且您嘗試以 ESCAPE 參數載入此資料，Amazon Redshift 會將值 `012` 載入資料表，但不會將此值解譯為要逸出的換行字元。  
在源自 Microsoft Windows 平台的資料中，若要逸出新行字元，您可能需要使用兩個逸出字元：一個用於換行字元，另一個用於新行字元。或者，您可以在載入檔案之前移除換行字元 (例如，使用 dos2unix 公用程式)。

EXPLICIT\$1IDS   <a name="copy-explicit-ids"></a>
對於有 IDENTITY 欄的資料表，如果您想要以資料表的來源資料檔案中的明確值來覆寫自動產生的值，請使用 EXPLICIT\$1IDS。如果命令包含欄清單，則此清單必須包含 IDENTITY 欄，才能使用此參數。EXPLICIT\$1IDS 值的資料格式必須符合 CREATE TABLE 定義所指定的 IDENTITY 格式。  
在您以 EXPLICIT\$1IDS 選項對資料表執行 COPY 命令之後，Amazon Redshift 將不再檢查資料表中的 IDENTITY 欄的唯一性。  
如果資料欄是使用 GENERATED BY DEFAULT AS IDENTITY 定義的，則可以複製它。值是利用您提供的值來產生或更新。EXPLICIT\$1IDS 不是必要選項。COPY 不會更新身分高浮水印。  
 如需使用 EXPLICIT\$1IDS 的 COPY 命令範例，請參閱[載入 VENUE 時將明確值提供給 IDENTITY 欄](r_COPY_command_examples.md#r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column)。

FILLRECORD   <a name="copy-fillrecord"></a>
當某些記錄的結尾缺少連續的欄時，允許載入資料檔案。遺失的欄會載入為 NULL。對於文字和 CSV 格式，如果遺失的欄是 VARCHAR 欄，則會載入長度為零的字串，而非 NULL。若要將 NULL 從文字和 CSV 載入至 VARCHAR 欄，請指定 EMPTYASNULL 關鍵字。只有在欄定義允許 NULL 時，才會進行 NULL 替換。  
例如，假設資料表定義包含四個可為 Null 的 CHAR 欄，且有一筆記錄包含值 `apple, orange, banana, mango`，則 COPY 命令可以載入並填入只包含值 `apple, orange` 的記錄。會將缺少的 CHAR 值載入為 NULL 值。

IGNOREBLANKLINES   <a name="copy-ignoreblanklines"></a>
忽略資料檔案中只含有換行字元的空白行，而不嘗試載入這些空白行。

IGNOREHEADER [ AS ] *number\$1rows*   <a name="copy-ignoreheader"></a>
將指定的 *number\$1rows* 視為檔案標頭而不載入。使用 IGNOREHEADER 來略過平行載入之所有檔案中的檔案標頭。

NULL AS '*null\$1string*'  <a name="copy-null-as"></a>
將符合 *null\$1string* 的欄位載入為 NULL，其中 *null\$1string* 可以是任何字串。如果資料包含 null 結束字元 (也稱為 NUL (UTF-8 0000) 或二進位零 (0x000))，COPY 會將其視為任何其他字元。例如，包含 '1' \$1\$1 NUL \$1\$1 '2' 的記錄被複製為長度為 3 個位元組的字串。如果欄位只包含 NUL，您可以使用 NULL AS 並指定 `'\0'` 或 `'\000'`，而以 NULL 取代 null 結束字元 - 例如 `NULL AS '\0'` 或 `NULL AS '\000'`。如果欄位包含以 NUL 結尾的字串，且指定 NULL AS，則會在字串結尾插入 NUL。請勿在 *null\$1string* 值使用 '\$1n' (換行符號)。Amazon Redshift 保留 '\$1 n' 用作行分隔符號。預設 *null\$1string* 為 `'\N`'。  
如果嘗試將 null 載入己定義為 NOT NULL 的欄，COPY 命令會失敗。

REMOVEQUOTES   <a name="copy-removequotes"></a>
在傳入的資料中移除括住字串的引號。引號內的所有字元 (包括分隔符號) 都會保留。如果字串有起始單引號或雙引號，但沒有對應的結束標記，則 COPY 命令無法載入此列，且會傳回錯誤。下表以一些簡單的範例示範含有引號的字串及結果載入的值。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/dg/copy-parameters-data-conversion.html)

ROUNDEC   <a name="copy-roundec"></a>
當輸入值的小數位數超過欄的小數位數時，將數值四捨五入。根據預設，COPY 會視需要截斷值，以符合欄的小數位數。例如，假設將值 `20.259` 載入 DECIMAL(8,2) 欄，COPY 預設會將值截斷為 `20.25`。如果指定 ROUNDEC，則 COPY 會將值四捨五入為 `20.26`。INSERT 命令一律會視需要將值四捨五入，以符合欄的小數位數，因此，COPY 命令搭配 ROUNDEC 參數的行為就如同 INSERT 命令。

TIMEFORMAT [AS] \$1'*timeformat\$1string*' \$1 'auto' \$1 'epochsecs' \$1 'epochmillisecs' \$1  <a name="copy-timeformat"></a>
指定時間格式。如果不指定 TIMEFORMAT，則 TIMESTAMP 欄的預設格式為 `YYYY-MM-DD HH:MI:SS`，TIMESTAMPTZ 欄的預設格式為 `YYYY-MM-DD HH:MI:SSOF`，其中 `OF` 是國際標準時間 (UTC) 的時差。*timeformat\$1string* 中不可包含時區指標。若要載入不是預設格式的 TIMESTAMPTZ 資料，請指定 'auto'；如需詳細資訊，請參閱[對 DATEFORMAT 和 TIMEFORMAT 使用自動辨識](automatic-recognition.md)。如需 *timeformat\$1string* 的相關資訊，請參閱 [DATEFORMAT 和 TIMEFORMAT 字串範例](r_DATEFORMAT_and_TIMEFORMAT_strings.md)。  
`'auto'` 引數可以辨識使用 DATEFORMAT 和 TIMEFORMAT 字串時不支援的多種格式。如果 COPY 命令無法辨識日期或時間值的格式，或者，日期和時間值使用彼此不同的格式，請使用 `'auto'` 引數來搭配 DATEFORMAT 或 TIMEFORMAT 參數。如需詳細資訊，請參閱[對 DATEFORMAT 和 TIMEFORMAT 使用自動辨識](automatic-recognition.md)。  
如果來源資料以 ecpch 時間表示，亦即，自 1970 年 1 月 1 日 00:00:00 UTC 以來的秒數或毫秒數，請指定 `'epochsecs'` 或 `'epochmillisecs'`。  
`'auto'`、`'epochsecs'` 和 `'epochmillisecs'` 關鍵字區分大小寫。  
AS 關鍵字為選用。

TRIMBLANKS   <a name="copy-trimblanks"></a>
從 VARCHAR 字串中移除尾端空格字元。此參數僅適用於 VARCHAR 資料類型的欄。

TRUNCATECOLUMNS   <a name="copy-truncatecolumns"></a>
將欄的資料截斷為適當的字元數，以符合欄規格。僅適用於 VARCHAR 或 CHAR 資料類型的欄，以及大小為 4 MB 或更小的列。

# 資料載入操作
<a name="copy-parameters-data-load"></a>

指定下列參數來管理載入操作的預設行為，以進行故障排除或縮短載入時間。
+ [COMPROWS](#copy-comprows) 
+ [COMPUPDATE](#copy-compupdate) 
+ [IGNOREALLERRORS](#copy-ignoreallerrors) 
+ [MAXERROR](#copy-maxerror) 
+ [NOLOAD](#copy-noload) 
+ [STATUPDATE](#copy-statupdate) <a name="copy-data-load-parameters"></a>Parameters

COMPROWS *numrows*   <a name="copy-comprows"></a>
指定列數做為壓縮分析的樣本大小。分析是以每個資料配量中的列為對象。例如，假設您指定 `COMPROWS 1000000` (1,000,000)，而系統總共包含四個配量，則每個配量最多讀取和分析 250,000 列。  
如果不指定 COMPROWS，則每個配量的樣本大小預設為 100,000。如果 COMPROWS 的值小於每個配量預設的 100,000 列，則會將該值自動提高到預設值。但是，如果載入的資料量不足以構成有意義的樣本，則不會執行自動壓縮。  
如果 COMPROWS 數字大於輸入檔案中的列數，COPY 命令仍會繼續，並對所有可用的列執行壓縮分析。此引數可接受的範圍是介於 1000 到 2147483647 (2,147,483,647) 之間的數字。

COMPUPDATE [ PRESET \$1 \$1 ON \$1 TRUE \$1 \$1 \$1 OFF \$1 FALSE \$1 ]  <a name="copy-compupdate"></a>
控制在 COPY 期間是否自動套用壓縮編碼。  
COMPUPDATE 為 PRESET 時，如果目標資料表為空白，即使資料欄已有 RAW 以外的編碼，COPY 命令也會為每個資料欄選擇壓縮編碼。可以取代目前指定的資料欄編碼。每個資料欄的編碼是以資料欄的資料類型為基礎。不會對任何資料取樣。Amazon Redshift 會自動指派壓縮編碼，如下所示：  
+ 定義為排序索引鍵的資料欄會有指派的 RAW 壓縮。
+ 定義為 BOOLEAN、REAL 或 DOUBLE PRECISION 資料類型的資料欄會有指派的 RAW 壓縮。
+ 定義為 SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIMESTAMP 或 TIMESTAMPTZ 的資料欄會有指派的 AZ64 壓縮。
+ 定義為 CHAR 或 VARCHAR 的資料欄會有指派的 LZO 壓縮。
省略 COMPUPDATE 時，只有在目標資料表為空白而您尚未為任何資料欄指定編碼 (RAW 除外) 時，COPY 命令才會為每個資料欄選擇壓縮編碼。每個欄的編碼是由 Amazon Redshift 決定。不會對任何資料取樣。  
當 COMPUPDATE 為 ON (或 TRUE) 或指定了 COMPUPDATE 但未帶選項時，如果資料表是空的，即使資料表欄已有 RAW 以外的編碼，COPY 也會套用自動壓縮。可以取代目前指定的資料欄編碼。每個資料欄的編碼會根據取樣資料的分析。如需詳細資訊，請參閱[利用自動壓縮載入資料表](c_Loading_tables_auto_compress.md)。  
將 COMPUPDATE 設為 OFF (或 FALSE) 時，會停用自動壓縮。不會變更資料欄編碼。  
如需關於分析壓縮的系統資料表資訊，請參閱 [STL\$1ANALYZE\$1COMPRESSION](r_STL_ANALYZE_COMPRESSION.md)。

IGNOREALLERRORS   <a name="copy-ignoreallerrors"></a>
您可以指定此選項來忽略載入作業期間發生的所有錯誤。  
如果您指定 MAXERROR 選項，就無法指定 IGNOREALLERRORS 選項。您無法為包括 ORC 和 Parquet 在內的單欄格式指定 IGNOREALLERRORS 選項。

MAXERROR [AS] *error\$1count*   <a name="copy-maxerror"></a>
如果載入傳回 *error\$1count* 個或更多錯誤，載入會失敗。如果載入傳回的錯誤很少，則會繼續載入，並傳回 INFO 訊息來指出無法載入的列數。當某些列因為格式錯誤或資料有其他不一致情形而無法載入到資料表時，使用此參數可讓載入繼續進行。  
如果要讓載入在發生第一個錯誤時立即失敗，請將此值設為 `0` 或 `1`。AS 關鍵字為選用。MAXERROR 預設值為 `0`，限制為 `100000`。  
 由於 Amazon Redshift 的平行本質，實際報告的錯誤數可能大於指定的 MAXERROR。如果 Amazon Redshift 叢集中的任何節點偵測到已超過 MAXERROR，每個節點會報告所有已遇到的錯誤。

NOLOAD   <a name="copy-noload"></a>
檢查資料檔案的有效性，而不實際載入資料。在執行實際資料載入之前，請使用 NOLOAD 參數來確保資料檔案可載入無誤。搭配 NOLOAD 參數來執行 COPY 的速度比載入資料快很多，因為其只會剖析檔案。

STATUPDATE [ \$1 ON \$1 TRUE \$1 \$1 \$1 OFF \$1 FALSE \$1 ]  <a name="copy-statupdate"></a>
控管在成功的 COPY 命令結束時自動運算和重新整理最佳化工具統計資料。根據預設，如果不使用 STATUPDATE 參數，只要資料表最初是空白，就會自動更新統計資料。  
每當將資料擷取到非空白資料表就會大幅改變資料表大小時，建議您執行 [ANALYZE](r_ANALYZE.md) 命令或使用 STATUPDATE ON 引數來更新統計資料。  
指定 STATUPDATE ON (或 TRUE) 時，不論資料表最初是否空白，都會自動更新統計資料。如果使用 STATUPDATE，則目前使用者必須是資料表擁有者或超級使用者。如果不指定 STATUPDATE，則只需要 INSERT 許可。  
指定 STATUPDATE OFF (或 FALSE) 時永遠不會更新統計資料。  
如需其他資訊，請參閱 [分析資料表](t_Analyzing_tables.md)。

# 依字母排序的參數清單
<a name="r_COPY-alphabetical-parm-list"></a>

下列清單提供每個 COPY 命令參數描述的連結 (依字母順序排列)。
+ [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate)
+ [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars)
+ [ACCESS\$1KEY\$1ID、SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id-access)
+ [AVRO](copy-parameters-data-format.md#copy-avro)
+ [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull)
+ [BZIP2](copy-parameters-file-compression.md#copy-bzip2) 
+ [COMPROWS](copy-parameters-data-load.md#copy-comprows)
+ [COMPUPDATE](copy-parameters-data-load.md#copy-compupdate)
+ [CREDENTIALS](copy-parameters-authorization.md#copy-credentials-cred)
+ [CSV](copy-parameters-data-format.md#copy-csv)
+ [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat)
+ [DELIMITER](copy-parameters-data-format.md#copy-delimiter)
+ [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull)
+ [ENCODING](copy-parameters-data-conversion.md#copy-encoding)
+ [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted)
+ [ESCAPE](copy-parameters-data-conversion.md#copy-escape)
+ [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids)
+ [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord)
+ [FIXEDWIDTH](copy-parameters-data-format.md#copy-fixedwidth)
+ [FORMAT](copy-parameters-data-format.md#copy-format)
+ [FROM](copy-parameters-data-source-s3.md#copy-parameters-from)
+ [GZIP](copy-parameters-file-compression.md#copy-gzip)
+ [IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role-iam)
+ [IGNOREALLERRORS](copy-parameters-data-load.md#copy-ignoreallerrors)
+ [IGNOREBLANKLINES](copy-parameters-data-conversion.md#copy-ignoreblanklines)
+ [IGNOREHEADER](copy-parameters-data-conversion.md#copy-ignoreheader)
+ [JSON format for COPY](copy-parameters-data-format.md#copy-json)
+ [LZOP](copy-parameters-file-compression.md#copy-lzop)
+ [MANIFEST](copy-parameters-data-source-s3.md#copy-manifest)
+ [MASTER_SYMMETRIC_KEY](copy-parameters-data-source-s3.md#copy-master-symmetric-key)
+ [MAXERROR](copy-parameters-data-load.md#copy-maxerror)
+ [NOLOAD](copy-parameters-data-load.md#copy-noload)
+ [NULL AS](copy-parameters-data-conversion.md#copy-null-as)
+ [READRATIO](copy-parameters-data-source-dynamodb.md#copy-readratio)
+ [REGION](copy-parameters-data-source-s3.md#copy-region)
+ [REMOVEQUOTES](copy-parameters-data-conversion.md#copy-removequotes)
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec)
+ [SESSION\$1TOKEN](copy-parameters-authorization.md#copy-token)
+ [SHAPEFILE](copy-parameters-data-format.md#copy-shapefile)
+ [SSH](copy-parameters-data-source-ssh.md#copy-ssh)
+ [STATUPDATE](copy-parameters-data-load.md#copy-statupdate)
+ [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat)
+ [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks)
+ [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns)
+ [ZSTD](copy-parameters-file-compression.md#copy-zstd)