

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# 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 테이블에서도 데이터를 직접 로드할 수 있습니다.

어떤 원본이든지 상관없이 단일 입력 행의 최대 크기는 4MB입니다.

테이블에서 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)
+ [원격 호스트(SSH)에서 COPY 지원](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>

1개 이상의 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;
```

### 파라미터
<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 객체의 경로를 지정합니다(예: `'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'`). 키 접두사를 참조할 수는 없습니다.  
매니페스트란 Amazon S3에서 로드할 개별 파일의 URL을 JSON 형식으로 나열한 텍스트 파일을 말합니다. URL에는 파일의 버킷 이름과 전체 객체 경로가 포함됩니다. 매니페스트에서 지정되는 파일이 서로 다른 버킷에 있을 수 있지만 모든 버킷은 Amazon Redshift 클러스터와 동일한 AWS 리전에 속해야 합니다. 파일이 두 번 나열되면 마찬가지로 두 번 로드됩니다. 다음은 3개의 파일을 로드하는 매니페스트의 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) 섹션을 참조하세요.

*권한 부여*  
COPY 명령을 실행하려면 Amazon S3, Amazon EMR, Amazon DynamoDB, Amazon EC2의 데이터를 포함해 다른 AWS 리소스의 데이터에도 액세스할 수 있도록 권한 부여가 필요합니다. 권한은 클러스터에 연결되는 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) 파라미터도 지정하거나, 혹은 **master\$1symmetric\$1key** 값을 [CREDENTIALS 파라미터 사용](copy-parameters-authorization.md#copy-credentials) 문자열에 추가해야 합니다.  
암호화된 파일이 압축 형식일 때는 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 요금](https://aws.amazon.com/s3/pricing/) 페이지의 **Amazon S3에서 다른 AWS 리전으로 데이터 전송** 및 [Amazon DynamoDB 요금](https://aws.amazon.com/dynamodb/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 명령을 사용하면 클러스터의 Hadoop 분산 파일 시스템(HDFS)에 고정 폭 파일, 문자로 구분된 파일, CSV 파일, JSON 파일 또는 Avro 파일 형식으로 텍스트 파일을 쓰도록 구성된 Amazon EMR 클러스터에서 병렬로 데이터를 로드할 수 있습니다.

**Topics**
+ [구문](#copy-parameters-data-source-emr-syntax)
+ [예제](#copy-parameters-data-source-emr-example)
+ [파라미터](#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';
```

## 파라미터
<a name="copy-parameters-data-source-emr-parameters"></a>

FROM  
로드할 데이터 원본입니다.

 'emr://*emr\$1cluster\$1id*/*hdfs\$1file\$1path*'  <a name="copy-emr"></a>
COPY 명령에서 데이터 파일을 참조하는 Amazon EMR 클러스터 및 HDFS 파일 경로의 고유 식별자입니다. HDFS 데이터 파일 이름에는 와일드카드 문자인 별표(\$1)와 물음표(?)가 포함되어서는 안 됩니다.  
Amazon EMR 클러스터는 COPY 작업이 완료될 때까지 계속 실행되어야 합니다. COPY 작업을 마치기 전에 HDFS 데이터 파일이 하나라도 변경되거나 삭제되면 예상하지 못한 결과가 나오거나 COPY 작업이 중단될 수 있습니다.
와일드카드 문자인 별표(\$1)와 물음표(?)를 *hdfs\$1file\$1path* 인수에 사용하여 다수의 파일을 로드하도록 지정할 수 있습니다. 예를 들어 `'emr://j-SAMPLE2B500FC/myoutput/part*'`는 파일 `part-0000`, `part-0001` 등을 식별합니다. 와일드카드 문자가 없는 파일 경로는 문자열 리터럴로 처리됩니다. 폴더 이름만 지정하면 COPY가 폴더의 모든 파일을 로드하려고 합니다.  
와일드카드 문자를 사용하거나 폴더 이름만 사용하는 경우에는 불필요한 파일이 로드되지 않는지 확인하세요. 예를 들어 일부 프로세스에서는 로그 파일이 출력 폴더로 로드되는 경우도 있습니다.
자세한 내용은 [Amazon EMR에서 데이터 로드](loading-data-from-emr.md) 섹션을 참조하세요.

*권한 부여*  
COPY 명령을 실행하려면 Amazon S3, Amazon EMR, Amazon DynamoDB, Amazon EC2의 데이터를 포함해 다른 AWS 리소스의 데이터에도 액세스할 수 있도록 권한 부여가 필요합니다. 권한은 클러스터에 연결되는 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

# 원격 호스트(SSH)에서 COPY 지원
<a name="copy-parameters-data-source-ssh"></a>

COPY 명령을 사용하면 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스나 다른 컴퓨터 같은 하나 이상의 원격 호스트에서 병렬로 파일을 로드할 수 있습니다. COPY는 SSH(Secure Shell)을 사용하여 원격 호스트에 연결하고 원격 호스트에서 명령을 실행해 텍스트 출력을 생성합니다. 원격 호스트는 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)
+ [파라미터](#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;
```

## 파라미터
<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 연결을 생성할 수 있습니다. 이렇게 생성된 각 호스트 연결을 통해 명령을 실행하고, 명령을 통해 출력되는 데이터를 병렬 방식으로 테이블에 로드합니다. *s3://copy\$1from\$1ssh\$1manifest\$1file* 인수는 매니페스트 파일에 Amazon S3 객체 키를 지정합니다. 매니페스트 파일은 COPY가 SSH 연결을 열어 원격 명령을 실행할 때 사용할 정보를 제공합니다.  
*s3://copy\$1from\$1ssh\$1manifest\$1file* 인수는 명시적으로 단일 파일을 참조해야 합니다. 이때 파일은 키 접두사가 될 수 없습니다. 다음은 그 한 예입니다.  

```
's3://amzn-s3-demo-bucket/ssh_manifest.txt'
```
매니페스트 파일은 Amazon Redshift가 호스트에 연결하는 데 사용하는 JSON 형식의 텍스트 파일입니다. 매니페스트 파일은 SSH 호스트 엔드포인트를 비롯해 호스트에서 데이터를 Amazon Redshift에 반환할 때 실행하는 명령을 지정합니다. 필요한 경우, 호스트 퍼블릭 키, 로그인 사용자 이름 및 각 항목의 필수 플래그를 포함시킬 수 있습니다. 다음은 SSH 연결 2개를 생성하는 매니페스트 파일 예입니다.  

```
{ 
    "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>"} 
     ] 
}
```
매니페스트 파일에는 SSH 연결마다 `"entries"` 구문이 하나씩 포함됩니다. 단일 호스트에 다중 연결을, 혹은 다수의 호스트에 다중 연결을 생성할 수 있습니다. 표시된 대로 필드 이름과 값 모두에 큰따옴표가 필요하며, 기울어진 따옴표나 "스마트" 따옴표가 아닌 단순한 따옴표(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"`).  
명령  <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`인 경우에는 publickey 필드에 `"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 명령은 데이터 읽기 작업을 2회 실행합니다. 즉, 원격 명령을 2회 실행합니다. 첫 번째 읽기 작업은 압축 분석을 위한 데이터 샘플을 제공하기 위한 것이며, 두 번째 읽기 작업에서 실제로 데이터를 로드합니다. 원격 명령 2회 실행이 문제를 일으킬 수 있는 경우에는 자동 압축을 비활성화해야 합니다. 자동 압축을 비활성화하려면 COMPUPDATE 파라미터를 OFF로 설정하여 COPY 명령을 실행합니다. 자세한 내용은 [자동 압축을 사용하여 테이블 로드](c_Loading_tables_auto_compress.md) 섹션을 참조하세요.  
SSH에서 COPY를 사용하는 자세한 절차는 [원격 호스트에서 데이터 로드](loading-data-from-remote-hosts.md) 섹션을 참조하세요.

*권한 부여*  
COPY 명령을 실행하려면 Amazon S3, Amazon EMR, Amazon DynamoDB, Amazon EC2의 데이터를 포함해 다른 AWS 리소스의 데이터에도 액세스할 수 있도록 권한 부여가 필요합니다. 권한은 클러스터에 연결되는 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 라우팅을 사용하도록 설정해야 합니다. Enhanced VPC Routing에 대한 자세한 내용은 [Amazon Redshift Enhanced VPC Routing](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;
```

### 파라미터
<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 액세스 자격 증명으로 식별됩니다.

*권한 부여*  
COPY 명령을 실행하려면 Amazon S3, Amazon EMR, DynamoDB, Amazon EC2의 데이터를 포함해 다른 AWS 리소스의 데이터에도 액세스할 수 있도록 권한 부여가 필요합니다. 권한은 클러스터에 연결되는 AWS Identity and Access Management(IAM) 역할을 참조하거나(역할 기반 액세스 제어) 사용자의 액세스 자격 증명을 입력하면(키 기반 액세스 제어) 부여할 수 있습니다. 보안과 유연성을 높이려면 IAM 역할 기반 액세스 제어를 권장합니다. 자세한 내용은 [권한 부여 파라미터](copy-parameters-authorization.md) 섹션을 참조하세요.

READRATIO [AS] *ratio*  <a name="copy-readratio"></a>
DynamoDB 테이블에서 데이터 로드에 사용할 프로비저닝 처리량의 비율입니다. READRATIO는 DynamoDB에서 COPY에 필요합니다. Amazon S3에서 COPY를 지원할 때는 사용할 수 없습니다. 이 비율은 사용되지 않는 평균 프로비저닝 처리량 미만의 값으로 설정하는 것이 좋습니다. 유효한 값은 1\$1200의 정수입니다.  
READRATIO를 100 이상으로 설정하면 Amazon Redshift가 DynamoDB 테이블의 프로비저닝된 처리량을 완전히 소비하여 COPY 세션 도중 동일한 테이블에 대한 동시 읽기 작업 성능을 심각하게 떨어뜨릴 수 있습니다. 쓰기 트래픽은 영향을 받지 않습니다. 100보다 높은 값일 때는 Amazon Redshift가 테이블의 프로비저닝 처리량을 충족하지 못하는 드문 경우의 문제를 해결할 수 있습니다. 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 명령을 실행하려면 Amazon S3, Amazon EMR, Amazon DynamoDB, Amazon EC2의 데이터를 포함해 다른 AWS 리소스의 데이터에도 액세스할 수 있도록 권한 부여가 필요합니다. 클러스터에 연결되어 있는 [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>

기본 키워드를 사용하여 COPY 명령이 실행될 때 Amazon Redshift에서 기본값으로 설정되고 클러스터와 연결된 IAM 역할을 사용하도록 합니다.

클러스터가 인증 및 권한 부여에 사용하는 IAM 역할의 Amazon 리소스 이름(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) 섹션을 참조하세요.

다음은 ACCESS\$1KEY\$1ID 및 SECRET\$1ACCESS\$1KEY 파라미터를 사용한 SESSION\$1TOKEN 파라미터의 구문 예입니다.

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

**참고**  
유연성을 높이려면 CREDENTIALS 파라미터 대신 [IAM\$1ROLE](#copy-iam-role-iam) 파라미터를 사용하는 것이 좋습니다.

옵션으로 [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을 로드하려고 합니다.

NOT NULL로 정의된 열에 COPY가 NULL을 할당하려고 하면 COPY 명령이 실패합니다.

[IDENTITY](r_CREATE_TABLE_NEW.md#identity-clause) 열이 열 목록에 포함되어 있으면 [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids) 역시 지정해야 합니다. 반대로 IDENTITY 열이 없으면 EXPLICIT\$1IDS를 지정할 수 없습니다. 열 목록을 지정하지 않으면 COPY 명령이 마치 열 목록이 순서에 따라 완전하게 지정되어 있는 것처럼, 그리고 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) 

COPY는 표준 데이터 형식 외에도 Amazon S3에서 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 파라미터를 사용하여 다른 구분자를 지정할 수도 있습니다.  
필드가 인용 부호로 묶이면 구분자와 인용 부호 사이의 공백은 무시됩니다. 구분자가 탭과 같은 공백 문자라면 구분자를 공백으로 처리하지 않습니다.  
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>
파이프 문자(`|`), 쉼표(`,`), 탭(`\t`) 또는 `|~|` 기호 등의 여러 문자와 같이 입력 파일의 필드를 구분하는 데 사용되는 문자를 지정합니다. 인쇄할 수 없는 문자가 지원됩니다. 문자를 UTF-8 코드 단위로 8진수로 표시할 수도 있습니다. 8진수로는 '\$1ddd' 형식을 사용하는데, 여기서 'd'는 8진수(0\$17)를 나타냅니다. 기본 구분자는 CSV 파라미터를 사용하지 않는 한 파이프 문자(`|`)입니다. 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을 사용할 수 없습니다.  
`COPY FROM SHAPEFILE`과 함께 `GEOGRAPHY` 객체를 사용하려면 먼저 `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 알고리즘과 자동으로 계산된 허용치(지정된 허용치를 초과하지 않는 경우)를 사용합니다. 이 알고리즘은 지정된 허용치 내에서 객체를 저장할 크기를 계산합니다. *허용치* 값은 옵션입니다.
shapefile 로드의 예는 [Amazon Redshift에 shapefile 로드](r_COPY_command_examples.md#copy-example-spatial-copy-shapefile) 섹션을 참조하세요.

AVRO [AS] '*avro\$1option*'  <a name="copy-avro"></a>
원본 데이터를 Avro 형식으로 지정합니다.  
Avro 형식은 다음과 같은 서비스 및 프로토콜을 통해 COPY에 지원됩니다.  
+ Amazon S3 
+ Amazon EMR 
+ 원격 호스트(SSH) 
Avro는 DynamoDB에서 COPY에 대해 지원되지 않습니다.  
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을 로드하려고 합니다.  
NOT NULL로 정의된 열에 COPY가 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 객체에는 이름, 즉 *키*가 포함된 이름-값 페어 3개인 `"name"`, `"type"` 및 `"fields"`가 있습니다.  
`"fields"` 키는 데이터 구조에서 각 필드의 이름과 데이터 형식을 정의하는 객체 배열과 쌍을 이룹니다. 기본적으로 COPY는 필드 이름을 열 이름과 자동으로 일치시킵니다. 열 이름은 항상 소문자이므로 `‘auto ignorecase’` 옵션을 지정하지 않는 한 일치하는 필드 이름도 소문자여야 합니다. 열 이름과 일치하지 않는 필드 이름은 모두 무시됩니다. 순서는 중요하지 않습니다. 위의 예에서는 COPY가 열 이름 `id`, `guid`, `name` 및 `address`에 매핑하고 있습니다.  
기본값인 `'auto'` 인수를 사용하면 COPY가 첫 번째 레벨의 객체만 열과 일치시킵니다. 스키마에서 더욱 깊숙한 레벨까지 매핑하려면, 혹은 필드 이름과 열 이름이 일치하지 않는 경우에는 JSONPaths 파일을 사용하여 매핑을 정의할 수 있습니다. 자세한 내용은 [JSONPaths 파일](#copy-json-jsonpaths) 섹션을 참조하세요.  
키와 연결된 값이 바이트, 배열, 레코드, 맵 또는 링크 같이 복잡한 Avro 데이터 형식인 경우에는 COPY가 이 값을 문자열로 로드합니다. 여기서 문자열은 데이터의 JSON 표현입니다. 열거형(enum)인 Avro 데이터 형식은 COPY에서 문자열로 로드되며, 이때 열거되는 내용은 형식 이름입니다. 문제 해결 예는 [JSON 형식의 COPY 지원](copy-usage_notes-copy-from-json.md)을(를) 참조하세요.  
스키마와 파일 메타데이터가 저장되는 Avro 파일 헤더의 최대 크기는 1MB입니다.    
단일 Avro 데이터 블록의 최대 크기는 4MB입니다. 이는 최대 행 크기와는 완전히 다릅니다. 단일 Avro 데이터 블록의 최대 크기를 초과하면 이에 따른 행 크기가 최댓값인 4MB보다 작더라도 COPY 명령이 중단됩니다.  
Amazon Redshift가 행 크기를 계산할 때는 내부적으로 파이프 문자(\$1)를 두 번 계산합니다. 따라서 입력 데이터에 파이프 문자가 다수 포함되어 있으면 데이터 블록이 4MB 미만이더라도 행 크기가 4MB를 초과할 수도 있습니다.

JSON [AS] '*json\$1option*'  <a name="copy-json"></a>
원본 데이터가 JSON 형식입니다.  
JSON 형식은 다음과 같은 서비스 및 프로토콜을 통해 COPY에 지원됩니다.  
+ Amazon S3
+ Amazon EMR에서 COPY
+ SSH 연결을 통한 COPY
JSON은 DynamoDB를 통한 COPY에서는 지원되지 않습니다.  
*json\$1option*의 유효 값은 다음과 같습니다.  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
+ `'noshred'` 
기본값은 `'auto'`입니다. Amazon Redshift는 JSON 문서를 로드하는 동안 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을 로드하려고 합니다.  
NOT NULL로 정의된 열에 COPY가 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`을 사용하고 JSONPaths 파일이 `s3://amzn-s3-demo-bucket/my_data.jsonpaths`라고 가정합니다. 이 경우 COPY는 `my_data.jsonpaths`를 데이터 파일로 로드하려고 합니다.  
'noshred'  <a name="copy-json-noshred"></a>
이 옵션을 사용하면 Amazon Redshift가 JSON 문서를 로드하는 동안 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 객체 및 배열의 최대 크기는 4MB입니다. 이는 최대 행 크기와는 완전히 다릅니다. 단일 JSON 객체 또는 배열의 최대 크기를 초과하면 이에 따른 행 크기가 최댓값인 4MB보다 작더라도 COPY 명령이 중단됩니다.

Amazon Redshift가 행 크기를 계산할 때는 내부적으로 파이프 문자(\$1)를 두 번 계산합니다. 따라서 입력 데이터에 파이프 문자가 다수 포함되어 있으면 객체 크기가 4MB 미만이더라도 행 크기가 4MB를 초과할 수도 있습니다.

COPY는 줄 바꿈 문자로 `\n`을, 그리고 탭 문자로 `\t`를 로드합니다. 백슬래시를 로드하려면 백슬래시(`\\`)로 이스케이프하세요.

COPY는 지정한 JSON 원본에서 올바른 형식의 유효 JSON 객체 또는 배열을 검색합니다. COPY가 사용 가능한 JSON 구조를 찾기 전에 또는 유효한 JSON 객체 또는 배열 사이에서 공백이 아닌 문자를 발견하면 COPY는 각 인스턴스에 대해 오류를 반환합니다. 이러한 오류는 MAXERROR 오류로 가산되며, 오류 수가 MAXERROR와 같거나 이를 초과하면 COPY는 중단됩니다.

Amazon Redshift는 STL\$1LOAD\$1ERRORS 시스템 테이블의 행에 오류를 일일이 기록합니다. LINE\$1NUMBER 열에는 오류를 일으킨 JSON 객체의 마지막 라인이 기록됩니다.

IGNOREHEADER를 지정하면 COPY가 지정한 만큼 JSON 데이터의 라인 수를 무시합니다. JSON 데이터의 줄 바꿈 문자도 항상 IGNOREHEADER 계산에 포함됩니다.

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) 섹션을 참조하세요.

JSONPaths 파일을 사용하려면 COPY 명령에 JSON 또는 AVRO 키워드를 추가합니다. 다음 형식을 사용하여 JSONPaths 파일의 S3 버킷 이름과 객체 경로를 지정합니다.

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

`s3://jsonpaths_file` 값은 `'s3://amzn-s3-demo-bucket/jsonpaths.txt'`와 같은 단일 파일을 명시적으로 참조하는 Amazon S3 객체 키여야 합니다. 키 접두사일 수 없습니다.

경우에 따라 경우에 따라 Amazon S3에서 로드하는 경우 `jsonpaths_file`로 지정된 파일은 데이터 파일에 대해 `copy_from_s3_objectpath`로 지정된 경로와 동일한 접두사를 갖습니다. 그러면 COPY는 JSONPaths 파일을 데이터 파일로 읽고 오류를 반환합니다. 예를 들어 데이터 파일이 객체 경로 `s3://amzn-s3-demo-bucket/my_data.json`을 사용하고 JSONPaths 파일이 `s3://amzn-s3-demo-bucket/my_data.jsonpaths`라고 가정합니다. 이 경우 COPY는 `my_data.jsonpaths`를 데이터 파일로 로드하려고 합니다.

 키 이름이 `"jsonpaths"`가 아닌 다른 문자열이라면 COPY 명령이 오류를 반환하지는 않습니다. 하지만 *jsonpaths\$1file*을 무시하고 `'auto'` 인수를 사용합니다.

다음 중 한 가지라도 발생하면 COPY 명령이 중단됩니다.
+ JSON 형식이 잘못된 경우
+ JSON 객체가 2개 이상인 경우
+ 공백을 제외한 문자가 객체 외부에 존재하는 경우
+ 배열 요소가 빈 문자열이거나, 혹은 문자열이 아닌 경우

JSONPaths 파일에는 MAXERROR가 적용되지 않습니다.

[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)여야 합니다.

JSONPath 표현식에서 참조하는 객체 요소가 JSON 데이터에서 발견되지 않으면 COPY가 NULL 값을 로드하려고 합니다. 참조 객체의 형식이 잘못되면 COPY가 로드 오류를 반환합니다.

JSONPath 표현식에서 참조하는 배열 요소가 JSON 또는 Avro 데이터에서 발견되지 않으면 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) 섹션을 참조하세요.

## Avro 데이터의 JSONPaths 사용
<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"}
    ]
}
```

다음은 AvroPath 표현식을 사용하여 위의 스키마를 참조하는 JSONPaths 파일의 예입니다.

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

위의 JSONPaths 예에는 다음과 같은 요소가 포함되어 있습니다.

jsonpaths  
AvroPath 표현식이 포함된 JSON 객체의 이름입니다.

[ … ]  
경로 요소가 포함된 JSON 배열을 묶는 대괄호입니다.

\$1  
Avro 스키마에서 `"fields"` 배열에 해당하는 루트 요소를 참조하는 달러 기호입니다.

"\$1.id",  
AvroPath 표현식의 대상입니다. 위 예에서 대상은 `"fields"` 배열에서 이름으로 `"id"`가 포함된 요소입니다. 표현식은 쉼표로 구분됩니다.

"\$1.friends[0].id"  
대괄호는 배열 인덱스를 나타냅니다. JSONPath 표현식은 0부터 시작되는 인덱싱을 사용하기 때문에 이 표현식에서는 `"friends"` 배열에서 이름으로 `"id"`가 포함된 첫 번째 요소를 참조합니다.

Avro 스키마 구문에서는 *안쪽 필드*를 사용하여 레코드 및 배열 데이터 형식의 구조를 정의해야 합니다. AvroPath 표현식에서는 안쪽 필드가 무시됩니다. 예를 들어 `"friends"` 필드는 `"inner_friends"`라는 이름의 배열을 정의하고, 이 배열은 `"friends_record"`라는 이름의 레코드를 정의합니다. `"id"` 필드를 참조하는 AvroPath 표현식은 추가되는 필드를 무시하고 대상 필드를 직접 참조할 수 있습니다. 다음은 `"friends"` 배열에 속한 두 필드를 참조하는 AvroPath 표현식입니다.

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

## 열 기반 데이터 형식 파라미터
<a name="copy-parameters-columnar-data"></a>

COPY는 표준 데이터 형식 외에도 Amazon S3에서 COPY를 실행할 때 다음과 같은 열 기반 데이터 형식을 지원합니다. 열 기반 형식에 대한 COPY는 지원되지만 특정 제한이 따릅니다. 자세한 내용은 [열 기반 데이터 형식에서 COPY 명령](copy-usage_notes-copy-from-columnar.md) 섹션을 참조하세요.

ORC  <a name="copy-orc"></a>
ORC(Optimized Row Columnar) 파일 형식을 사용하는 파일에서 데이터를 불러옵니다.

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가 잘못된 UTF-8 문자를 각각 *replacement\$1char*에서 지정하는 문자로 구성된, 동일한 길이의 문자열로 변경합니다. 예를 들어 변경 문자가 '`^`'라면 잘못된 3바이트 문자는 '`^^^`'로 변경됩니다.  
 변경 문자는 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로 로드됩니다. 예를 들어 공백 문자 3개가 다른 문자 없이 연이어 포함된 문자열은 NULL로 로드됩니다. 이 옵션을 사용하지 않으면 기본 동작으로 공백 문자를 있는 그대로 로드합니다.

DATEFORMAT [AS] \$1'*dateformat\$1string*' \$1 'auto' \$1  <a name="copy-dateformat"></a>
인수를 지정하지 않을 경우 기본값은 `'YYYY-MM-DD'`입니다. 예를 들어 이를 대신할 수 있는 유효 형식은 `'MM-DD-YYYY'`입니다.  
COPY 명령이 날짜 또는 시간 값의 형식을 인식하지 못하거나, 혹은 날짜 또는 시간 값이 다른 형식인 경우에는 DATEFORMAT 또는 TIMEFORMAT 파라미터에 `'auto'` 인수를 사용하세요. `'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로 로드됩니다. 빈 필드는 2개의 구분자가 사이에 아무런 문자도 없이 연이어 데이터에 포함되어 있을 때 발생합니다. EMPTYASNULL과 NULL AS '' (empty string)는 동작이 동일합니다.

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`을 지정합니다. 자세한 내용은 **Wikipedia의 [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 파라미터 역시 지정된다는 것을 가정합니다. 입력 데이터는 다음과 같이 파이프로 구분된 필드 2개로 구성됩니다.  

```
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 파라미터는 8진수, 16진수, Unicode 또는 기타 이스케이프 시퀀스 표기법을 해석하지 않습니다. 예를 들어 원본 데이터에 8진수 라인 피드 값(`\012`)이 포함되어 있을 때 ESCAPE 파라미터를 사용해 이 데이터를 로드하려고 하면 Amazon Redshift가 값 `012`를 테이블로 로드하는 동시에 이 값을 이스케이프 처리되는 라인 피드로 해석하지 않습니다.  
Microsoft Windows 플랫폼에서 작성된 데이터의 줄 바꿈 문자를 이스케이프 처리하려면 캐리지 리턴용 하나와 라인 피드용 하나, 총 2개의 이스케이프 문자를 사용해야 할 수도 있습니다. 그 밖에 파일을 로드하기 전에 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\$1ID를 사용하는 COPY 명령의 예는 [IDENTITY 열의 명시적인 값을 사용한 VENUE 로드](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 대신 길이가 0인 문자열이 로드됩니다. 텍스트 및 CSV에서 VARCHAR 열로 NULL을 로드하려면 EMPTYASNULL 키워드를 지정합니다. NULL 치환은 열 정의가 NULL을 허용할 때만 유효합니다.  
예를 들어 테이블 정의에 NULL을 허용하는 CHAR 열이 4개 포함되어 있고, 레코드에 포함된 값이 `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*은 어떤 문자열이든 가능합니다. 데이터에 NUL(UTF-8 0000) 또는 이진 0(0x000)으로도 불리는 null 종결자가 포함되어 있으면 COPY는 이를 다른 문자로 취급합니다. 예를 들어 '1' \$1\$1 NUL \$1\$1 '2'를 포함하는 레코드는 길이가 3바이트인 문자열로 복사됩니다. 필드에 NUL만 포함된 경우 NULL AS로 `'\0'` 또는 `'\000'`을 지정(예: `NULL AS '\0'` 또는 `NULL AS '\000'`)하여 null 종결자를 NULL로 바꿀 수 있습니다. 필드에 NUL로 끝나는 문자열이 있을 때 NULL AS를 지정하면 끝에서 NUL과 함께 문자열이 삽입됩니다. *null\$1string* 값에 '\$1n'(줄 바꿈)을 사용하지 않습니다. Amazon Redshift는 줄 구분 기호로 사용하기 위해 '\$1n'을 예약합니다. 기본 *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/ko_kr/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 명령은 열 값의 소수점 자릿수와 일치시켜야 할 때마다 항상 값을 반올림합니다. 따라서 ROUNDEC 파라미터가 지정된 COPY 명령은 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 명령이 날짜 또는 시간 값의 형식을 인식하지 못하거나, 혹은 날짜 및 시간 값이 서로 다른 형식인 경우에는 DATEFORMAT 또는 TIMEFORMAT 파라미터에 `'auto'` 인수를 사용하세요. 자세한 내용은 [DATEFORMAT 및 TIMEFORMAT 옵션의 자동 인식 사용](automatic-recognition.md) 섹션을 참조하세요.  
원본 데이터가 epoch 시간, 즉 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 데이터 형식의 열에만 적용되며, 행의 크기는 4MB 이하입니다.

# 데이터 로드 작업
<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>파라미터

COMPROWS *numrows*   <a name="copy-comprows"></a>
압축 분석 시 샘플 크기로 사용할 행의 수를 지정합니다. 분석은 각 데이터 조각의 행에서 실행됩니다. 예를 들어 `COMPROWS 1000000`(1,000,000)을 지정했을 때 시스템에 총 4개의 조각이 있는 경우에는 조각당 250,000개까지만 행을 읽고 분석합니다.  
COMPROWS가 지정되지 않은 경우 샘플 크기는 기본적으로 조각당 100,000개입니다. 기본값인 조각당 100,000개의 행보다 낮은 COMPROWS 값은 자동으로 기본값으로 업그레이드됩니다. 하지만 로드되는 데이터의 크기가 유의적인 샘플을 산출할 정도로 충분하지 않은 경우에는 자동 압축이 일어나지 않습니다.  
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가 생략된 경우 COPY 명령은 대상 테이블이 비어 있고 임의의 열에 대한 인코딩(RAW 이외)을 지정하지 않은 경우에만 각 열에 대한 압축 인코딩을 선택합니다. 각 열에 대한 인코딩은 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 파라미터를 사용하면 실제로 데이터를 로드하기 전에 데이터 파일의 로드에 따른 잠재적 오류 여부를 확인할 수 있습니다. COPY를 NOLOAD 파라미터와 함께 실행하면 파일의 구문만 분석하기 때문에 데이터 로드보다 속도가 훨씬 빠릅니다.

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)