

 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 명령을 사용하여 Amazon S3에서 로드
<a name="t_loading-tables-from-s3"></a>

[COPY](r_COPY.md) 명령을 사용하여 Amazon S3의 데이터 파일에서 병렬로 테이블을 로드합니다. Amazon S3 객체 접두사를 사용하거나 매니페스트 파일을 사용하여 로드할 파일을 지정할 수 있습니다.

접두사를 사용하여 로드할 파일을 지정하는 구문은 다음과 같습니다.

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

 매니페스트 파일은 로드할 데이터 파일을 나열하는 JSON 형식 파일입니다. 매니페스트 파일을 사용하여 로드할 파일을 지정하는 구문은 다음과 같습니다.

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

로드할 테이블이 데이터베이스에 이미 존재하고 있어야 합니다. 테이블 생성에 대한 자세한 내용은 SQL 참조의 [CREATE TABLE](r_CREATE_TABLE_NEW.md) 섹션을 참조하세요.

*authorization* 값은 Amazon Redshift가 Amazon S3 객체에 액세스하는 데 필요한 AWS 권한 부여를 제공합니다. 필요한 권한에 대한 자세한 내용은 [COPY, UNLOAD 및 CREATE LIBRARY 작업을 위한 IAM 권한](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions) 섹션을 참조하세요. 선호되는 인증 방법은 IAM\$1ROLE 파라미터를 지정하고 IAM 역할의 Amazon 리소스 이름(ARN)에 필요한 권한을 제공하는 것입니다. 자세한 정보는 [역할 기반 액세스 제어](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)을 참조하세요.

IAM\$1ROLE 파라미터를 사용하여 인증하려면 다음 구문을 참조하여 *<aws-account-id>* 및 *<role-name>*을 바꿉니다.

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

다음 예는 IAM 역할을 사용한 인증을 보여 줍니다.

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

기타 옵션에 대한 자세한 내용은 [권한 부여 파라미터](copy-parameters-authorization.md) 섹션을 참조하세요.

실제로 테이블을 로드하지 않고 데이터를 확인하려면 [COPY](r_COPY.md) 명령과 함께 NOLOAD 옵션을 사용하세요.

다음 예는 `venue.txt`라는 이름의 파일에서 파이프로 구분된 데이터의 첫 몇 행을 보여 줍니다.

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

파일을 Amazon S3에 업로드하기 전에 COPY 명령이 병렬 처리를 사용해 로드할 수 있도록 파일을 여러 파일로 분할합니다. 이때 파일 수는 클러스터 조각 수의 승수가 되어야 합니다. 이때는 압축 후 파일 크기가 1MB\$11GB로 거의 같아질 수 있도록 로딩 데이터 파일을 분할합니다. 자세한 내용은 [압축 및 비압축 파일에서 데이터 로드](t_splitting-data-files.md) 섹션을 참조하세요.

예를 들어 `venue.txt` 파일은 다음과 같이 4개의 파일로 분할할 수 있습니다.

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

다음 COPY 명령은 Amazon S3 버킷 `amzn-s3-demo-bucket`에서 접두사 'venue'가 있는 데이터 파일에서 파이프로 구분된 데이터를 사용해 VENUE 테이블을 로드합니다.

**참고**  
다음 예의 Amazon S3 버킷 `amzn-s3-demo-bucket`은 존재하지 않습니다. 기존 Amazon S3 버킷의 실제 데이터를 사용하는 샘플 COPY 명령은 [샘플 데이터 로드](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html) 섹션을 참조하세요.

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

키 접두사 'venue'가 있는 Amazon S3 객체가 존재하지 않는 경우 로드가 실패합니다.

**Topics**
+ [매니페스트를 사용하여 데이터 파일 지정](loading-data-files-using-manifest.md)
+ [Amazon S3에서 압축된 데이터 파일 로드](t_loading-gzip-compressed-data-files-from-S3.md)
+ [Amazon S3에서 고정 너비 데이터 로드](t_loading_fixed_width_data.md)
+ [Amazon S3에서 멀티바이트 데이터 로드](t_loading_unicode_data.md)
+ [Amazon S3에서 암호화된 데이터 파일 로드](c_loading-encrypted-files.md)

# 매니페스트를 사용하여 데이터 파일 지정
<a name="loading-data-files-using-manifest"></a>

매니페스트를 사용하여 COPY 명령이 데이터 로드에 필요한 파일만 모두 로드하도록 할 수 있습니다. 매니페스트를 이용하면 다른 버킷, 다른 리전이나 접두사가 다른 파일에서 파일을 불러올 수 있습니다. COPY 명령에 대해 객체 경로를 제공하는 대신 로드할 파일을 명시적으로 나열하는 JSON 형식 텍스트 파일의 이름을 제공합니다. 매니페스트의 URL은 접두사만이 아니라 파일의 버킷 이름과 전체 객체 경로를 지정해야 합니다.

매니페스트 파일에 대한 자세한 내용은 [매니페스트를 사용한 데이터 파일 지정](r_COPY_command_examples.md#copy-command-examples-manifest)을 참조하세요.

다음 예는 버킷이 서로 다르고 날짜 스탬프로 시작되는 파일 이름을 가진 파일을 로드하는 JSON을 보여 줍니다.

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

선택 사항인 `mandatory` 플래그는 파일이 없을 때 의 오류 반환 여부를 결정합니다. `mandatory`의 기본값은 `false`입니다. 필수 설정에 상관없이 파일이 발견되지 않으면 COPY는 종료됩니다.

다음은 앞 예에서 사용한 `cust.manifest` 매니페스트를 이용해 명령을 실행하는 예입니다.

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

## UNLOAD에 의해 생성된 매니페스트 사용
<a name="loading-data-files-using-unload-manifest"></a>

MANIFEST 파라미터를 사용하여 [UNLOAD](r_UNLOAD.md) 작업에 의해 생성된 매니페스트에는 COPY 작업에 필요하지 않은 키가 포함될 수 있습니다. 예를 들어 다음 `UNLOAD`매니페스트는 Amazon Redshift Spectrum 외부 테이블에 필요하고, `ORC` 또는 `Parquet` 파일 형식의 데이터 파일을 로드하는 데 필요한 `meta` 키를 포함합니다. `meta` 키에는 파일의 실제 크기(바이트 단위)인 값과 함께 `content_length` 키가 포함되어 있습니다. COPY 작업에는 `url` 키와 선택 사항인 `mandatory` 키만 필요합니다.

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

매니페스트 파일에 대한 자세한 내용은 [매니페스트를 사용하여 데이터 파일 지정](r_COPY_command_examples.md#copy-command-examples-manifest) 섹션을 참조하세요.

# Amazon S3에서 압축된 데이터 파일 로드
<a name="t_loading-gzip-compressed-data-files-from-S3"></a>

gzip, lzop 또는 bzip2를 사용해 압축된 데이터 파일을 로드하려면 해당 옵션인 GZIP, LZOP 또는 BZIP2를 포함시킵니다.

예를 들어 다음 명령은 lzop을 사용하여 압축한 파일에서 로드합니다.

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

**참고**  
lzop 압축으로 데이터 파일을 압축하고 **--filter 옵션을 사용하는 경우 COPY 명령은 이를 지원하지 않습니다.

# Amazon S3에서 고정 너비 데이터 로드
<a name="t_loading_fixed_width_data"></a>

고정 너비 데이터 파일은 데이터의 각 열의 길이가 균일합니다. 고정 너비 데이터 파일에서 각 필드의 길이와 위치는 정확히 동일합니다. 고정 너비 데이터 파일의 문자 데이터(CHAR 및 VARCHAR)의 경우, 너비를 균일하게 유지하기 위해 자리 표시자로 선행 공백 또는 후행 공백을 포함시켜야 합니다. 정수의 경우, 자리 표시자로 선행 제로를 사용해야 합니다. 고정 너비 데이터 파일에는 열을 분리하는 구분 기호가 없습니다.

고정 너비 데이터 파일을 기존 테이블로 로드하려면 COPY 명령에서 FIXEDWIDTH 파라미터를 사용합니다. 데이터가 올바로 로드되려면 테이블 사양이 fixedwidth\$1spec의 값과 일치해야 합니다.

파일에서 테이블로 고정 너비 데이터를 로드하려면 다음 명령을 실행합니다.

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

*fixedwidth\$1spec* 파라미터는 콜론으로 분리된 각 열의 식별자와 각 열 너비가 포함된 문자열입니다. **column:width** 쌍은 쉼표로 구분됩니다. 식별자는 숫자, 문자 또는 숫자와 문자의 조합 중 어떤 것이든 가능합니다. 식별자는 테이블 자체와 아무 관련이 없으므로 사양에는 테이블과 동일한 순서로 열이 포함되어야 합니다.

다음 2개의 예에 나오는 사양은 동일하며, 첫 번째 사양은 숫자 식별자를 사용하고 두 번째 사양은 문자열 식별자를 사용합니다.

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

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

다음 예는 상기 사양을 사용하여 VENUE 테이블에 로드할 수 있는 고정 너비 샘플 데이터를 보여 줍니다.

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

다음 COPY 명령은 이 데이터 세트를 VENUE 테이블로 로드합니다.

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

# Amazon S3에서 멀티바이트 데이터 로드
<a name="t_loading_unicode_data"></a>

데이터에 중국어나 키릴 문자 같이 ASCII가 아닌 멀티바이트 문자가 포함되어 있는 경우에는 VARCHAR 열에 데이터를 로드해야 합니다. VARCHAR 데이터 형식은 4바이트 UTF-8 문자를 지원하지만 CHAR 데이터 형식에서는 1바이트 ASCII 문자만 허용되기 때문입니다. Amazon Redshift 테이블에 5바이트 이상의 문자는 로드할 수 없습니다. CHAR 및 VARCHAR에 대한 자세한 내용은 [데이터 타입](c_Supported_data_types.md) 섹션을 참조하세요.

입력 파일이 어떤 인코딩을 사용하는지 확인하려면 Linux * `file` * 명령을 사용합니다.

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

# Amazon S3에서 암호화된 데이터 파일 로드
<a name="c_loading-encrypted-files"></a>

COPY 명령을 사용하면 서버 측 암호화나 클라이언트 측 암호화 또는 이 둘을 모두 사용하여 Amazon S3에 업로드된 데이터 파일을 로드할 수 있습니다.

COPY 명령이 지원하는 Amazon S3 암호화 유형은 다음과 같습니다.
+ Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)
+ AWS KMS keys(SSE-KMS)를 사용한 서버 측 암호화 지정
+ 클라이언트 측 대칭 루트 키를 사용한 클라이언트 측 암호화

COPY 명령이 지원하지 않는 Amazon S3 암호화 유형은 다음과 같습니다.
+ 고객 제공 키를 사용한 서버 측 암호화(SSE-C)
+ AWS KMS key를 사용한 클라이언트 측 암호화
+ 고객 제공 비대칭 루트 키를 사용한 클라이언트 측 암호화

Amazon S3 암호화에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서의 [서버 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html) 및 [클라이언트 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)를 참조하세요.

[UNLOAD](r_UNLOAD.md) 명령은 SSE-S3를 사용하여 자동으로 파일을 암호화합니다. 고객 관리형 대칭 키와 함께 SSE-KMS 또는 클라이언트측 암호화를 사용하여 언로드할 수도 있습니다. 자세한 내용은 [암호화된 데이터 파일 언로드](t_unloading_encrypted_files.md) 섹션을 참조하세요.

COPY 명령은 SSE-S3 및 SSE-KMS를 사용하여 암호화된 파일을 자동으로 인식하고 로드합니다. ENCRYPTED 옵션을 지정하고 키 값을 제공하여 클라이언트 측 대칭 루트 키를 사용해 암호화된 파일을 로드할 수 있습니다. 자세한 내용은 [Amazon S3에 암호화된 데이터 업로드](t_uploading-encrypted-data.md) 섹션을 참조하세요.

클라이언트 측에서 암호화된 데이터 파일을 로드하려면 MASTER\$1SYMMETRIC\$1KEY 파라미터를 사용하여 루트 키 값을 제공하고 ENCRYPTED 옵션을 포함시킵니다.

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

gzip, lzop 또는 bzip2 압축된 암호화된 데이터 파일을 로드하려면 루트 키 값 및 ENCRYPTED 옵션과 함께 GZIP, LZOP 또는 BZIP2를 포함시킵니다.

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