

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

# UNLOAD
<a name="r_UNLOAD"></a>


|  | 
| --- |
| 2025년 4월 30일부터 신규 고객에게 COPY 및 UNLOAD 명령에 대한 클라이언트 측 암호화가 더 이상 제공되지 않습니다. 2025년 4월 30일 이전 12개월 동안 COPY 및 UNLOAD 명령에 클라이언트 측 암호화를 사용한 경우, 2026년 4월 30일까지 COPY 또는 UNLOAD 명령에 클라이언트 측 암호화를 계속 사용할 수 있습니다. 2026년 4월 30일 이후에는 COPY 및 UNLOAD에 클라이언트 측 암호화를 사용할 수 없습니다. 가능한 한 빨리 COPY 및 UNLOAD에 서버 측 암호화를 사용하도록 전환하는 것이 좋습니다. 이미 COPY 및 UNLOAD에 서버 측 암호화를 사용하고 있는 경우 변경 사항이 없으며 쿼리를 변경하지 않고도 계속 사용할 수 있습니다. COPY 및 UNLOAD 암호화에 대한 자세한 내용은 아래 ENCRYPTED 파라미터를 참조하세요.   | 

Amazon S3 서버 측 암호화(SSE-S3)를 사용하여 Amazon S3에서 하나 이상의 텍스트, JSON 또는 Apache Parquet 파일로 쿼리의 결과를 언로드합니다. AWS Key Management Service 키(SSE-KMS)를 사용하여 서버 측 암호화를 지정할 수도 있습니다.

기본적으로 언로드된 파일의 형식은 파이프로 구분된(`|`) 텍스트입니다.

MAXFILESIZE 파라미터를 설정하면 Amazon S3의 파일 크기를 비롯해 파일 수까지도 관리할 수 있습니다. S3 IP 범위가 허용 목록에 추가되었는지 확인합니다. 필요한 S3 IP 범위에 대한 자세한 내용은 [네트워크 격리](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation)를 참조하세요.

이제 Amazon Redshift 쿼리 결과를 분석을 위한 효율적인 개방형 열 기반 스토리지 형식인 Apache Parquet의 Amazon S3 데이터 레이크에 언로드할 수 있습니다. Parquet 형식은 텍스트 형식에 비해 언로드 속도가 최대 2배 빠르고 Amazon S3에서 스토리지 사용량이 최대 6배 적습니다. 따라서 Amazon S3에서 Amazon S3 데이터 레이크로 데이터 변환 및 보강 작업의 결과물을 오픈 형식으로 저장할 수 있습니다. 그런 다음 Redshift Spectrum과 Amazon Athena, Amazon EMR, Amazon SageMaker AI 등의 기타 AWS 서비스를 사용하여 데이터를 분석할 수 있습니다.

UNLOAD 명령 사용에 대한 자세한 내용과 예제 시나리오는 [Amazon Redshift에서 데이터 언로드](c_unloading_data.md) 섹션을 참조하세요.

## 필수 권한
<a name="r_UNLOAD-permissions"></a>

UNLOAD 명령이 성공하려면 Amazon S3 위치에 쓸 수 있는 권한과 함께 데이터베이스의 데이터에 대해 최소 SELECT 권한이 필요합니다. UNLOAD 명령의 AWS 리소스에 액세스할 수 있는 권한에 대한 자세한 내용은 [다른 AWS 리소스에 대한 액세스 권한](copy-usage_notes-access-permissions.md) 섹션을 참조하세요.

최소 권한 권한을 적용하려면 다음 권장 사항에 따라 명령을 실행하는 사용자에게 필요한 권한만 부여합니다.
+ 사용자는 데이터에 대한 SELECT 권한이 있어야 합니다. 데이터베이스 권한을 제한하는 방법에 대한 자세한 내용은 [GRANT](r_GRANT.md) 섹션을 참조하세요.
+ 사용자는 AWS 계정의 Amazon S3 버킷에 쓸 IAM 역할을 수임할 권한이 필요합니다. 데이터베이스 사용자가 역할을 수임하도록 액세스를 제한하려면 *Amazon Redshift 관리 안내서*의 [IAM 역할에 대한 액세스 제한](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service-database-users.html)을 참조하세요.
+ 사용자는 Amazon S3 버킷에 대한 액세스 권한이 필요합니다. Amazon S3 버킷 정책을 사용하여 권한을 제한하려면 *Amazon Simple Storage Service 사용 설명서*의 [ Amazon S3의 버킷 정책](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)을 참조하세요.

## 구문
<a name="r_UNLOAD-synopsis"></a>

```
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
authorization
[ option, ...] 

where authorization is
IAM_ROLE { default | 'arn:aws:iam::<AWS 계정-id-1>:role/<role-name>[,arn:aws:iam::<AWS 계정-id-2>:role/<role-name>][,...]' }
            
where option is
| [ FORMAT [ AS ] ] CSV | PARQUET | JSON
| PARTITION BY ( column_name [, ... ] ) [ INCLUDE ]
| MANIFEST [ VERBOSE ]
| HEADER
| DELIMITER [ AS ] 'delimiter-char'
| FIXEDWIDTH [ AS ] 'fixedwidth-spec'
| ENCRYPTED [ AUTO ]
| BZIP2
| GZIP
| ZSTD
| ADDQUOTES
| NULL [ AS ] 'null-string'
| ESCAPE
| ALLOWOVERWRITE
| CLEANPATH
| PARALLEL [ { ON | TRUE } | { OFF | FALSE } ]
| MAXFILESIZE [AS] max-size [ MB | GB ]
| ROWGROUPSIZE [AS] size [ MB | GB ]
| REGION [AS] 'aws-region' }
| EXTENSION 'extension-name'
```

## 파라미터
<a name="unload-parameters"></a>

('*select-statement*')   
SELECT 쿼리입니다. 쿼리의 결과가 언로드됩니다. 대부분의 경우 쿼리에 ORDER BY 절을 지정하여 정렬된 순서대로 데이터를 언로드할 만한 가치가 있습니다. 이런 접근 방식을 취하면 데이터를 다시 로드할 때 데이터 정렬 소요 시간이 단축됩니다.  
다음에 표시된 것처럼 쿼리를 작은따옴표로 묶어야 합니다.  

```
('select * from venue order by venueid')
```
쿼리에 따옴표가 포함된 경우(예: 리터럴 값을 묶기 위해) 리터럴을 2개의 작은따옴표 집합 사이에 넣습니다. 쿼리도 작은따옴표로 묶어야 합니다.  

```
('select * from venue where venuestate=''NV''')
```

TO 's3://*object-path/name-prefix*'  
Amazon S3에서 Amazon Redshift가 출력 파일 객체(MANIFEST가 지정되어 있는 경우 매니페스트 파일 포함)를 작성할 위치의 전체 경로(버킷 이름 포함)입니다. 객체 이름에는 *name-prefix*가 접두사로 붙습니다. `PARTITION BY`를 사용하면 필요에 따라 슬래시(/)가 *name-prefix* 값의 끝에 자동으로 추가됩니다. 추가적인 보안을 위해, UNLOAD는 HTTPS 연결을 사용하여 Amazon S3에 연결합니다. 기본적으로, UNLOAD는 조각당 하나 이상의 파일을 작성합니다. UNLOAD는 다음과 같이 조각 번호와 부품 번호를 지정된 이름 접두사에 추가합니다.  
`<object-path>/<name-prefix><slice-number>_part_<part-number>`.   
MANIFEST가 지정되어 있는 경우 다음과 같이 매니페스트 파일이 작성됩니다.  
`<object_path>/<name_prefix>manifest`.   
PARALLEL을 OFF로 지정하면 데이터 파일은 다음과 같이 기록됩니다.  
`<object_path>/<name_prefix><part-number>`.   
UNLOAD는 Amazon S3 서버 측 암호화(SSE)를 사용하여 암호화된 파일을 자동 생성합니다(MANIFEST가 사용되는 경우 매니페스트 파일 포함). COPY 명령은 로드 작업 중에 서버 측 암호화 파일을 자동으로 읽습니다. Amazon S3 콘솔 또는 API를 사용하여 버킷에서 서버 측 암호화 파일을 투명하게 다운로드할 수 있습니다. 자세한 내용은 [서버 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html) 섹션을 참조하세요.  
Amazon S3 버킷이 Amazon Redshift 데이터베이스와 같은 AWS 리전에 있지 않을 때는 REGION이 필요합니다.

*권한 부여*  
UNLOAD 명령으로 Amazon S3에 데이터를 쓰려면 권한 부여가 필요합니다. UNLOAD 명령은 COPY 명령이 권한 부여를 위해 사용하는 것과 동일한 파라미터를 사용합니다. 자세한 내용은 COPY 명령 구문 참조 설명서에서 [권한 부여 파라미터](copy-parameters-authorization.md) 섹션을 참조하세요.

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::*<AWS 계정-id-1>*:role/*<role-name>*'  <a name="unload-iam"></a>
기본 키워드를 사용하여 UNLOAD 명령이 실행될 때 Amazon Redshift에서 기본값으로 설정되고 클러스터와 연결된 IAM 역할을 사용하도록 합니다.  
클러스터가 인증 및 권한 부여에 사용하는 IAM 역할의 Amazon 리소스 이름(ARN)을 사용합니다. IAM\$1ROLE을 지정하면 ACCESS\$1KEY\$1ID 및 SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN 또는 CREDENTIALS는 사용할 수 없습니다. IAM\$1ROLE을 연결할 수 있습니다. 자세한 내용은 *Amazon Redshift 관리 가이드*의 [IAM 역할 연결](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles)을 참조하세요.

[ FORMAT [AS] ] CSV \$1 PARQUET \$1 JSON  <a name="unload-csv"></a>
기본 형식을 재정의하는 언로드 형식을 지정하는 키워드입니다.  
CSV의 경우 쉼표(,) 문자를 기본 구분 기호로 사용하여 텍스트 파일을 CSV 형식으로 언로드합니다. 필드에 구분 기호, 큰따옴표, 줄 바꿈 또는 캐리지 리턴이 포함된 경우 언로드된 파일의 필드가 큰따옴표로 묶입니다. 데이터 필드 내의 큰따옴표는 추가 큰따옴표로 이스케이프됩니다. 행 0개가 언로드되면 Amazon Redshift는 빈 Amazon S3 객체를 기록할 수 있습니다.  
PARQUET의 경우 Apache Parquet 버전 1.0 형식으로 파일에 언로드합니다. 기본적으로 각 행 그룹은 SNAPPY 압축을 사용하여 압축됩니다. Apache Parquet 형식에 대한 자세한 내용은 [Parquet](https://parquet.apache.org/)을 참조하세요.  
JSON을 사용하는 경우 쿼리 결과의 전체 레코드를 나타내는 JSON 객체가 각 행에 포함된 JSON 파일로 언로드합니다. Amazon Redshift는 쿼리 결과에 SUPER 열이 포함된 경우 중첩된 JSON 작성을 지원합니다. 유효한 JSON 객체를 만들려면 쿼리의 각 열 이름이 고유해야 합니다. JSON 파일에서 부울 값은 `t` 또는 `f`로 언로드되고 NULL 값은 `null`로 언로드됩니다. 행 0개가 언로드되면 Amazon Redshift는 Amazon S3 객체를 기록하지 않습니다.  
FORMAT 및 AS 키워드는 선택 사항입니다. CSV는 ESCAPE, FIXEDWIDTH 또는 ADDQUOTES와 함께 사용할 수 없습니다. PARQUET은 DELIMITER, FIXEDWIDTH, ADDQUOTES, ESCAPE, NULL AS, HEADER, GZIP, BZIP2 또는 ZSTD와 함께 사용할 수 없습니다. PARQUET with ENCRYPTED는 AWS Key Management Service 키(SSE-KMS)를 사용하는 서버측 암호화에서만 지원됩니다. JSON은 DELIMITER, HEADER, FIXEDWIDTH, ADDQUOTES, ESCAPE 또는 NULL AS와 함께 사용할 수 없습니다.

PARTITION BY ( *column\$1name* [, ... ] ) [INCLUDE]  <a name="unload-partitionby"></a>
언로드 작업을 위한 파티션 키를 지정합니다. UNLOAD는 Apache Hive 규칙에 따라 파티션 키 값을 기반으로 출력 파일을 파티션 폴더로 자동 분할합니다. 예를 들어 파티션 연도가 2019년이고 월이 9월인 Parquet 파일의 접두사는 다음과 같습니다. `s3://amzn-s3-demo-bucket/my_prefix/year=2019/month=September/000.parquet`.  
*column\$1name*의 값은 언로드 중인 쿼리 결과의 열이어야 합니다.  
INCLUDE 옵션을 사용하여 PARTITION BY를 지정하면 파티션 열이 언로드된 파일에서 제거되지 않습니다.  
Amazon Redshift는 PARTITION BY 절에서 문자열 리터럴을 지원하지 않습니다.

MANIFEST [ VERBOSE ]  
UNLOAD 프로세스에 의해 생성되는 데이터 파일의 세부 정보를 명시적으로 나열하는 매니페스트 파일을 생성합니다. 매니페스트란 Amazon S3에 작성한 개별 파일의 URL을 나열한 JSON 형식의 텍스트 파일을 말합니다.  
MANIFEST가 VERBOSE 옵션을 사용해 지정된 경우 매니페스트에는 다음 세부 정보가 포함됩니다.  
+ 열 이름 및 데이터 형식 그리고 CHAR, VARCHAR 또는 NUMERIC 데이터 형식의 경우 각 열에 대한 차원. CHAR 및 VARCHAR 데이터 형식의 경우 차원은 길이입니다. DECIMAL 또는 NUMERIC 데이터 형식의 경우 차원은 정밀도 및 배율입니다.
+ 각 파일로 언로드되는 행 수. HEADER 옵션이 지정되면 행 수에는 헤더 행이 포함됩니다.
+ 언로드되는 모든 파일의 총 파일 크기 및 모든 파일로 언로드되는 총 행 수. HEADER 옵션이 지정되면 행 수에는 헤더 행이 포함됩니다.
+ 작성자. 작성자는 항상 "Amazon Redshift"입니다.
VERBOSE는 MANIFEST 다음에만 지정할 수 있습니다.  
매니페스트 파일은 같은 Amazon S3 경로 접두사에 `<object_path_prefix>manifest` 형식의 언로드 파일로 작성됩니다. 예를 들어 UNLOAD가 Amazon S3 경로 접두사 '`s3://amzn-s3-demo-bucket/venue_`'를 지정하는 경우 매니페스트 파일 위치는 '`s3://amzn-s3-demo-bucket/venue_manifest`'가 됩니다.

HEADER  
각 출력 파일의 맨 위에 열 이름을 포함하는 헤더 줄을 추가합니다. 또한 CSV, DELIMITER, ADDQUOTES, ESCAPE와 같은 텍스트 변환 옵션이 헤더 줄에 적용됩니다. HEADER는 FIXEDWIDTH와 함께 사용할 수 없습니다.

DELIMITER AS '*delimiter\$1character*'  
파이프 문자(\$1), 쉼표(,) 또는 탭(\$1t) 같이 출력 파일에서 필드를 구분할 때 사용할 단일 ASCII 문자를 지정합니다. 텍스트 파일의 기본 구분 기호는 파이프 문자입니다. CSV 파일의 기본 구분 기호는 쉼표 문자입니다. AS 키워드는 옵션입니다. DELIMITER는 FIXEDWIDTH와 함께 사용할 수 없습니다. 데이터에 구분 기호 문자가 포함되는 경우 ESCAPE 옵션을 지정하여 구분 기호를 이스케이프하거나 ADDQUOTES를 사용하여 데이터를 큰따옴표로 묶어야 합니다. 또는 데이터에 포함되지 않은 구분 기호를 지정합니다.

FIXEDWIDTH '*fixedwidth\$1spec*'  
각각의 열 너비가 구분 기호로 구분되지 않고 고정된 길이인 파일로 데이터를 언로드합니다. *fixedwidth\$1spec*은 열 개수와 열의 너비를 지정하는 문자열입니다. AS 키워드는 옵션입니다. FIXEDWIDTH는 데이터를 자르지 않으므로 UNLOAD 문에서 각 열에 대한 사양은 최소한 그 열에 대해 가장 긴 항목의 길이만큼은 되어야 합니다. *fixedwidth\$1spec*의 형식이 아래에 표시되어 있습니다.  

```
'colID1:colWidth1,colID2:colWidth2, ...'
```
FIXEDWIDTH는 DELIMITER 또는 HEADER와 함께 사용할 수 없습니다.

ENCRYPTED [AUTO]  <a name="unload-parameters-encrypted"></a>
Amazon S3의 출력 파일은 Amazon S3 서버 측 암호화를 사용하여 암호화될 것임을 지정하는 절입니다. MANIFEST가 지정되어 있는 경우 매니페스트 파일도 암호화됩니다. 자세한 내용은 [암호화된 데이터 파일 언로드](t_unloading_encrypted_files.md) 섹션을 참조하세요. ENCRYPTED 파라미터를 지정하지 않는 경우 UNLOAD는 AWS 관리형 암호화 키를 사용하는 Amazon S3 서버 측 암호화(SSE-S3)를 사용하여 암호화된 파일을 자동 생성합니다.  
ENCRYPTED의 경우 AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS)를 사용하여 Amazon S3에 언로드할 수 있습니다. 이 경우 [KMS_KEY_ID](#unload-parameters-kms-key-id) 파라미터를 사용하여 키 ID를 제공합니다. KMS\$1KEY\$1ID 파라미터와 함께 [CREDENTIALS 파라미터 사용](copy-parameters-authorization.md#copy-credentials) 파라미터를 사용할 수 없습니다. KMS\$1KEY\$1ID를 사용하여 데이터에 대해 UNLOAD 명령을 실행하면 키를 지정하지 않고 동일한 데이터에 대해 COPY 작업을 수행할 수 있습니다.  
ENCRYPTED AUTO를 사용하는 경우 UNLOAD 명령은 대상 Amazon S3 버킷 속성에서 기본 AWS KMS 암호화 키를 가져와서 AWS KMS 키로 Amazon S3에 기록된 파일을 암호화합니다. 버킷에 기본 AWS KMS 암호화 키가 없는 경우 UNLOAD는 AWS에서 관리하는 암호화 키(SSE-S3)를 사용한 Amazon Redshift 서버 측 암호화를 사용하여 암호화된 파일을 자동으로 생성합니다. 이 옵션은 KMS\$1KEY\$1ID, MASTER\$1SYMMETRIC\$1KEY, 또는 master\$1symmetric\$1key가 포함된 CREDENTIALS와 함께 사용할 수 없습니다.

KMS\$1KEY\$1ID '*key-id*'  <a name="unload-parameters-kms-key-id"></a>
Amazon S3에서 데이터 파일 암호화에 사용할 AWS Key Management Service(AWS KMS) 키의 키 ID를 지정합니다. 자세한 내용은 [AWS Key Management Service란 무엇입니까?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 참조하세요. KMS\$1KEY\$1ID를 지정하는 경우 [ENCRYPTED](#unload-parameters-encrypted) 파라미터도 지정해야 합니다. KMS\$1KEY\$1ID를 지정하는 경우 CREDENTIALS 파라미터를 사용하여 인증할 수 없습니다. 대신에 [IAM\$1ROLE 파라미터 사용](copy-parameters-authorization.md#copy-iam-role) 또는 [ACCESS\$1KEY\$1ID 및 SECRET\$1ACCESS\$1KEY 파라미터 사용](copy-parameters-authorization.md#copy-access-key-id)를 사용하세요.

bzip2   
조각당 하나 이상의 bzip2 압축 파일로 데이터를 언로드합니다. 각각의 결과 파일에는 `.bz2` 확장명이 추가됩니다.

GZIP   
조각당 하나 이상의 gzip 압축 파일로 데이터를 언로드합니다. 각각의 결과 파일에는 `.gz` 확장명이 추가됩니다.

ZSTD   
조각당 하나 이상의 Zstandard 압축 파일로 데이터를 언로드합니다. 각각의 결과 파일에는 `.zst` 확장명이 추가됩니다.

ADDQUOTES   
Amazon Redshift가 구분 기호 자체를 포함하는 데이터 값을 언로드할 수 있도록 언로드되는 각각의 데이터 필드 주변에 따옴표를 배치합니다. 예를 들어, 구분 기호가 쉼표인 경우 다음 데이터를 성공적으로 언로드하고 다시 로드할 수 있습니다.  

```
 "1","Hello, World" 
```
따옴표를 추가하지 않을 경우 문자열 `Hello, World`는 두 개의 개별 필드로 구문 분석됩니다.  
일부 출력 형식은 ADDQUOTES를 지원하지 않습니다.  
ADDQUOTES를 사용하는 경우 데이터를 다시 로드하면 COPY에 REMOVEQUOTES를 지정해야 합니다.

NULL AS '*null-string*'  
언로드 파일에서 null 값을 나타내는 문자열을 지정합니다. 이 옵션이 사용되는 경우 모든 출력 파일에는 선택한 데이터에서 발견되는 null 값의 자리에 지정된 문자열이 있습니다. 이 옵션을 지정하지 않으면 null 값이 다음으로 언로드됩니다.  
+ 구분 기호로 분리된 출력에 대해 제로 길이의 문자열 
+ 고정 너비 출력을 위한 공백 문자열
Null 문자열이 고정 폭의 언로드에 대해 지정되어 있고 출력 열의 폭이 null 문자열의 폭보다 작은 경우 다음 동작이 이루어집니다.  
+ 비문자 열의 경우 빈 필드가 출력됨 
+ 문자 열의 경우 오류가 보고됨 
사용자 정의 문자열이 null 값을 나타내는 다른 데이터 형식과 달리 Amazon Redshift는 JSON 형식을 사용하여 SUPER 데이터 열을 내보내고 JSON 형식에 따라 null로 나타냅니다. 결과적으로 SUPER 데이터 열은 UNLOAD 명령에 사용된 NULL [AS] 옵션을 무시합니다.

ESCAPE   
구분 기호로 분리된 언로드 파일에 있는 CHAR 및 VARCHAR 열의 경우, 다음 문자가 나올 때마다 그 앞에 이스케이프 문자(`\`)가 배치됩니다.  
+ 라인 피드: `\n`
+ 캐리지 리턴: `\r`
+ 언로드된 데이터에 대해 지정되는 구분 기호 문자.
+ 이스케이프 문자: `\`
+ 따옴표: `"` 또는 `'`(UNLOAD 명령에 ESCAPE와 ADDQUOTES가 모두 지정된 경우).
COPY 문에 ESCAPE 옵션을 사용해 데이터를 로드한 경우에는 UNLOAD 명령에서도 ESCAPE 옵션을 지정하여 역수 출력 파일을 생성해야 합니다. 마찬가지로 ESCAPE 옵션을 사용해 UNLOAD 작업을 하는 경우에도 동일한 데이터에 대해 COPY 작업을 하면서 ESCAPE 파라미터를 사용해야 합니다.

ALLOWOVERWRITE   <a name="allowoverwrite"></a>
기본적으로, UNLOAD는 덮어쓸 가능성이 있는 파일을 찾을 경우에 실패합니다. ALLOWOVERWRITE가 지정된 경우 UNLOAD는 매니페스트 파일을 포함한 기존 파일을 덮어씁니다.

CLEANPATH  <a name="cleanpath"></a>
CLEANPATH 옵션은 지정된 위치로 파일을 언로드하기 전에 TO 절에 지정된 Amazon S3 경로에 있는 기존 파일을 제거합니다.  
PARTITION BY 절을 포함하면 UNLOAD 작업으로 생성된 새 파일을 수신하기 위해 파티션 폴더에서만 기존 파일이 제거됩니다.  
Amazon S3 버킷에 대해 `s3:DeleteObject` 권한이 있어야 합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [Amazon S3의 정책 및 권한](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html)을 참조하세요. CLEANPATH 옵션을 사용하여 제거한 파일은 영구적으로 삭제되며 복구할 수 없습니다. 대상 Amazon S3 버킷에 버전 관리가 활성화되어 있는 경우 CLEANPATH 옵션을 사용하여 UNLOAD 작업을 수행해도 파일의 이전 버전은 제거되지 않습니다.  
ALLOWOVERWRITE 옵션을 지정하면 CLEANPATH 옵션을 지정할 수 없습니다.

PARALLEL   <a name="unload-parallel"></a>
기본적으로 UNLOAD는 클러스터의 조각 수에 따라 다수의 파일에 병렬 방식으로 데이터를 작성합니다. 기본 옵션은 ON 또는 TRUE입니다. PARALLEL이 OFF 또는 FALSE인 경우 UNLOAD는 하나 이상의 데이터 파일에 직렬 방식으로 작성하여 절대적으로 ORDER BY 절(사용하는 경우)에 따라 정렬됩니다. 데이터 파일의 최대 크기는 6.2GB입니다. 예를 들어, 13.4GB의 데이터를 언로드하는 경우 UNLOAD는 다음 3개의 파일을 생성합니다.  

```
s3://amzn-s3-demo-bucket/key000    6.2 GB
s3://amzn-s3-demo-bucket/key001    6.2 GB
s3://amzn-s3-demo-bucket/key002    1.0 GB
```
UNLOAD 명령은 병렬 처리를 사용하도록 설계되었습니다. 따라서 대부분의 경우 특히, COPY 명령을 사용하여 테이블을 로드하는 데 파일이 사용되는 경우 PARALLEL을 활성화하는 것이 좋습니다.

MAXFILESIZE [AS] max-size [ MB \$1 GB ]   <a name="unload-maxfilesize"></a>
UNLOAD가 Amazon S3에서 생성하는 파일의 최대 크기를 지정합니다. 5MB와 6.2GB 사이에서 소수 값을 지정하세요. AS 키워드는 옵션입니다. 기본 단위는 MB입니다. MAXFILESIZE를 지정하지 않을 경우 최대 파일 크기의 기본값은 6.2GB입니다. 이 값을 지정하더라도 매니페스트 파일의 크기는 MAXFILESIZE의 영향을 받지 않습니다.

ROWGROUPSIZE [AS] size [ MB \$1 GB ]   <a name="unload-rowgroupsize"></a>
행 그룹의 크기를 지정합니다. 더 큰 크기를 선택하면 행 그룹 수를 줄여 네트워크 통신량을 줄일 수 있습니다. 32\$1128MB의 정수 값을 지정합니다. AS 키워드는 옵션입니다. 기본 단위는 MB입니다.  
ROWGROUPSIZE가 지정되지 않은 경우 기본 크기는 32MB입니다. 이 파라미터를 사용하려면 스토리지 형식이 Parquet이어야 하고 노드 유형은 ra3.4xlarge, ra3.16xlarge 또는 dc2.8xlarge여야 합니다.

REGION [AS] '*aws-region*'  <a name="unload-region"></a>
대상 Amazon S3 버킷이 위치한 AWS 리전을 지정합니다. Amazon Redshift 데이터베이스와 동일한 AWS 리전에 있지 않은 Amazon S3 버킷에 대한 UNLOAD의 경우 REGION이 필요합니다.  
*aws\$1region*의 값은 *AWS 일반 참조*의 [Amazon Redshift 리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region) 표에 나와 있는 AWS 리전과 일치해야 합니다.  
기본적으로 UNLOAD는 대상 Amazon S3 버킷이 Amazon Redshift 데이터베이스와 동일한 AWS 리전에 있다고 가정합니다.

EXTENSION '*extension-name*'  <a name="unload-extension"></a>
언로드된 파일의 이름에 추가할 파일 확장자를 지정합니다. Amazon Redshift는 검증을 실행하지 않으므로, 지정된 파일 확장자가 올바른지 직접 확인해야 합니다. 확장자를 제공하지 않고 압축 방법을 지정하면 Amazon Redshift는 파일 이름에 압축 방법의 확장자만 추가합니다. 확장자를 제공하지 않고 압축 방법을 지정하지 않으면 Amazon Redshift는 파일 이름에 아무 것도 추가하지 않습니다.

## 사용 노트
<a name="unload-usage-notes"></a>

### 구분 기호로 분리된 모든 텍스트 UNLOAD 작업을 위해 ESCAPE 사용
<a name="unload-usage-escape"></a>

구분 기호를 사용하여 UNLOAD하는 경우 데이터에는 ESCAPE 옵션 설명에 나와 있는 모든 문자 또는 구분 기호가 포함될 수 있습니다. 이 경우 UNLOAD 문과 함께 ESCAPE 옵션을 사용해야 합니다. UNLOAD와 함께 ESCAPE 옵션을 사용하지 않을 경우 언로드된 데이터를 사용하는 이후의 COPY 작업이 실패할 수 있습니다.

**중요**  
ESCAPE는 UNLOAD 및 COPY 문 둘 다와 함께 사용하는 것이 좋습니다. 데이터가 구분 기호 또는 이스케이프될 필요가 있을 수 있는 다른 문자를 포함하고 있지 않은 경우는 예외입니다.

### 부동 소수점 정밀도의 상실
<a name="unload-usage-floating-point-precision"></a>

연속으로 언로드되었다가 다시 로드되는 부동 소수점 데이터의 정밀도가 상실되는 경우가 발생할 수 있습니다.

### Limit 절
<a name="unload-usage-limit-clause"></a>

SELECT 쿼리는 외부 SELECT에 LIMIT 절을 사용할 수 없습니다. 예를 들어, 다음 UNLOAD 문은 실패합니다.

```
unload ('select * from venue limit 10')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

대신, 다음 예와 같이 중첩된 LIMIT 절을 사용하세요.

```
unload ('select * from venue where venueid in
(select venueid from venue order by venueid desc limit 10)')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

또는 LIMIT 절을 사용하는 SELECT…INTO 또는 CREATE TABLE AS를 사용하여 테이블을 채운 다음 그 테이블에서 언로드할 수 있습니다.

### GEOMETRY 데이터 형식의 열 언로드
<a name="unload-usage-geometry"></a>

GEOMETRY 열은 텍스트 또는 CSV 형식으로만 언로드할 수 있습니다. `FIXEDWIDTH` 옵션을 사용하여 GEOMETRY 데이터를 언로드할 수는 없습니다. 데이터는 EWKB(Extended Well-Known Binary) 형식의 16진수로 언로드됩니다. EWKB 데이터의 크기가 4MB를 초과하면 나중에 데이터를 테이블에 로드할 수 없으므로 경고가 발생합니다.

### HLLSKETCH 데이터 형식 언로드
<a name="unload-usage-hll"></a>

HLLSKETCH 열을 텍스트 또는 CSV 형식으로만 온로드할 수 있습니다. `FIXEDWIDTH` 옵션을 사용하여 HLLSKETCH 데이터를 언로드할 수는 없습니다. 데이터는 고밀도 HyperLogLog 스케치의 경우 Base64 형식으로, 희소 HyperLogLog 스케치의 경우 JSON 형식으로 언로드됩니다. 자세한 내용은 [HyperLogLog 함수](hyperloglog-functions.md) 섹션을 참조하세요.

다음 예에서는 HLLSKETCH 열이 포함된 테이블을 파일로 내보냅니다.

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

UNLOAD ('select * from hll_table') TO 's3://amzn-s3-demo-bucket/unload/'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' NULL AS 'null' ALLOWOVERWRITE CSV;
```

### VARBYTE 데이터 유형의 열 언로드
<a name="unload-usage-varbyte"></a>

VARBYTE 열은 텍스트 또는 CSV 형식으로만 언로드할 수 있습니다. 데이터는 16진수 형식으로 언로드됩니다. `FIXEDWIDTH` 옵션을 사용하여 VARBYTE 데이터를 언로드할 수는 없습니다. CSV로 UNLOAD의 `ADDQUOTES` 옵션은 지원되지 않습니다. VARBYTE 열은 PARTITIONED BY 열이 될 수 없습니다.

### FORMAT AS PARQUET 절
<a name="unload-parquet-usage"></a>

FORMAT AS PARQUET을 사용할 경우 다음을 고려하세요.
+ Parquet에 언로드할 때 파일 수준 압축을 사용하지 않습니다. 각 행 그룹이 SNAPPY로 압축됩니다.
+ MAXFILESIZE를 지정하지 않을 경우 최대 파일 크기의 기본값은 6.2GB입니다. MAXFILESIZE를 사용하여 파일 크기를 5MB–6.2GB로 지정할 수 있습니다. 파일을 쓸 때 실제 파일 크기는 근사값이므로 지정한 숫자와 정확히 같지 않을 수 있습니다.

  스캔 성능을 최대화하기 위해에서 Amazon Redshift는 크기가 32MB로 동일한 행 그룹을 포함하는 Parquet 파일을 생성하려고 합니다. 지정한 MAXFLESZEE 값은 32MB의 가장 가까운 배수로 자동으로 내림됩니다. 예를 들어 MAXFILESIZE 200 MB를 지정한 경우 언로드되는 각 Parquet 파일은 약 192MB(32MB 행 그룹 x 6 = 192MB)입니다.
+ 열에서 TIMESTAMPTZ 데이터 형식을 사용하는 경우 타임스탬프 값만 언로드됩니다. 시간대 정보는 언로드되지 않습니다.
+ 밑줄(\$1) 또는 마침표(.) 문자로 시작하는 파일 이름 접두사를 지정하지 마세요. Redshift Spectrum에서는 이러한 문자로 시작하는 파일을 숨김 파일로 간주하고 무시합니다.

### PARTITION BY 절
<a name="unload-partitionby-usage"></a>

PARTITION BY를 사용할 경우 다음을 고려하세요.
+ 파티션 열은 출력 파일에 포함되지 않습니다.
+ UNLOAD 문에 사용되는 SELECT 쿼리에 파티션 열을 포함해야 합니다. UNLOAD 명령에서 원하는 수의 파티션 열을 지정할 수 있습니다. 하지만 파일의 일부가 될 파티션이 아닌 열이 하나 이상 있어야 한다는 제한이 있습니다.
+ 파티션 키 값이 null이면 Amazon Redshift에서 해당 데이터를 `partition_column=__HIVE_DEFAULT_PARTITION__`이라는 기본 파티션으로 자동으로 언로드합니다.
+ UNLOAD 명령은 외부 카탈로그를 호출하지 않습니다. 새 파티션을 기존 외부 테이블의 일부로 등록하려면 별도의 ALTER TABLE ... ADD PARTITION ... 명령을 사용합니다. 또는 CREATE EXTERNAL TABLE 명령을 실행하여 언로드된 데이터를 새 외부 테이블로 등록할 수 있습니다. AWS Glue 크롤러를 사용하여 Data Catalog를 채울 수도 있습니다. 자세한 내용은 *AWS Glue Developer Guide*의 [Defining Crawlers](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) 섹션을 참조하세요.
+ MANIFEST 옵션을 사용하는 경우 Amazon Redshift는 루트 Amazon S3 폴더에 매니페스트 파일을 하나만 생성합니다.
+ 파티션 키로 사용할 수 있는 열 데이터 형식은 SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, BOOLEAN, CHAR, VARCHAR, DATE 및 TIMESTAMP입니다.

### ASSUMEROLE 권한을 사용하여 UNLOAD 작업에 대한 IAM 역할에 대한 액세스 권한 부여
<a name="unload-assumerole-privilege-usage"></a>

UNLOAD 작업을 위해 IAM 역할에 대한 액세스 권한을 특정 사용자 및 그룹에 제공하려면 슈퍼 사용자는 IAM 역할에 대한 ASSUMEROLE 권한을 사용자 및 그룹에 부여할 수 있습니다. 자세한 내용은 [GRANT](r_GRANT.md) 섹션을 참조하세요.

### UNLOAD는 Amazon S3 액세스 포인트 별칭을 지원하지 않습니다.
<a name="unload-usage-s3-access-point-alias"></a>

UNLOAD 명령에는 Amazon S3 액세스 포인트 별칭을 사용할 수 없습니다.

## 예제
<a name="r_UNLOAD-examples"></a>

UNLOAD 명령을 사용하는 방법을 보여주는 예제는 [UNLOAD 예](r_UNLOAD_command_examples.md) 섹션을 참조하세요.

# UNLOAD 예
<a name="r_UNLOAD_command_examples"></a>

이 예제에서는 UNLOAD 명령의 다양한 파라미터를 보여줍니다. 많은 예제에서 TICKIT 샘플 데이터가 사용됩니다. 자세한 내용은 [샘플 데이터베이스](c_sampledb.md) 섹션을 참조하세요.

**참고**  
여기에서 설명하는 예는 가독성을 위해 줄 바꿈이 포함되었습니다. 실제 *credentials-args* 문자열에서는 줄 바꿈이나 공백을 입력하지 마세요.

## 파이프(기본 구분 기호)로 구분된 파일로 VENUE 언로드
<a name="unload-examples-venue"></a>

다음 예에서는 VENUE 테이블을 언로드하고 `s3://amzn-s3-demo-bucket/unload/`에 데이터를 씁니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

기본적으로, UNLOAD는 조각당 하나 이상의 파일을 작성합니다. 노드당 2개의 조각이 있는 2노드 클러스터를 가정할 때, 이전의 예에서는 다음 파일이 `amzn-s3-demo-bucket`에 생성됩니다.

```
unload/0000_part_00
unload/0001_part_00
unload/0002_part_00
unload/0003_part_00
```

출력 파일을 더 효과적으로 구분하려면 해당 위치에 접두사를 포함하면 됩니다. 다음 예에서는 VENUE 테이블을 언로드하고 `s3://amzn-s3-demo-bucket/unload/venue_pipe_`에 데이터를 씁니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

그 결과, `unload` 폴더에 다음 4개의 파일이 있으며, 이때도 4개의 조각이 있는 것으로 가정합니다.

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## 분할된 Parquet 파일에 LINEITE 테이블 언로드
<a name="unload-examples-partitioned-parquet"></a>

다음 예에서는 LINEITEM 테이블을 `l_shipdate` 열로 분할하여 Parquet 형식으로 언로드합니다.

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate);
```

네 개의 조각을 가정할 때 결과 Parquet 파일은 다양한 폴더에 동적으로 분할됩니다.

```
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-02/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-03/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-04/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
...
```

**참고**  
경우에 따라 UNLOAD 명령에서 다음 SQL 문과 같이 INCLUDE 옵션을 사용했습니다.  

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate) INCLUDE;
```
이러한 경우 `l_shipdate` 열은 Parquet 파일의 데이터에도 있습니다. 그렇지 않은 경우 `l_shipdate` 열 데이터가 Parquet 파일에 없습니다.

## JSON 파일로 VENUE 테이블 언로드
<a name="unload-examples-json"></a>

다음 예에서는 VENUE 테이블을 언로드하고 `s3://amzn-s3-demo-bucket/unload/`에 JSON 형식의 데이터를 씁니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
JSON;
```

다음은 VENUE 테이블의 샘플 행입니다.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

JSON으로 언로드한 후 파일의 형식은 다음과 유사합니다.

```
{"venueid":1,"venuename":"Pinewood Racetrack","venuecity":"Akron","venuestate":"OH","venueseats":0}
{"venueid":2,"venuename":"Columbus \"Crew\" Stadium ","venuecity":"Columbus","venuestate":"OH","venueseats":0}
{"venueid":4,"venuename":"Community, Ballpark, Arena","venuecity":"Kansas City","venuestate":"KS","venueseats":0}
```

## CSV 파일로 VENUE 언로드
<a name="unload-examples-csv"></a>

다음 예에서는 VENUE 테이블을 언로드하고 `s3://amzn-s3-demo-bucket/unload/`에 CSV 형식의 데이터를 씁니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV;
```

VENUE 테이블에 다음 행이 포함되어 있다고 가정합니다.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

언로드 파일은 다음과 유사합니다.

```
1,Pinewood Racetrack,Akron,OH,0
2,"Columbus ""Crew"" Stadium",Columbus,OH,0
4,"Community, Ballpark, Arena",Kansas City,KS,0
```

## 구분 기호를 사용하여 CSV 파일로 VENUE 언로드
<a name="unload-examples-csv-delimiter"></a>

다음 예제에서는 VENUE 테이블을 언로드하고 파이프 문자(\$1)를 구분 기호로 사용하여 데이터를 CSV 형식으로 씁니다. 언로드된 파일이 `s3://amzn-s3-demo-bucket/unload/`에 기록됩니다. 이 예제의 VENUE 테이블에는 첫 번째 행의 값에 파이프 문자가 포함되어 있습니다(`Pinewood Race|track`). 이는 결과의 값이 큰따옴표로 묶여 있음을 보여 줍니다. 큰따옴표는 큰따옴표로 이스케이프되고 전체 필드는 큰따옴표로 묶여 있습니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV DELIMITER AS '|';
```

VENUE 테이블에 다음 행이 포함되어 있다고 가정합니다.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-------------
      1 | Pinewood Race|track        | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

언로드 파일은 다음과 유사합니다.

```
1|"Pinewood Race|track"|Akron|OH|0
2|"Columbus ""Crew"" Stadium"|Columbus|OH|0
4|Community, Ballpark, Arena|Kansas City|KS|0
```

## 매니페스트 파일로 VENUE 언로드
<a name="unload-examples-manifest"></a>

매니페스트 파일을 생성하려면 MANIFEST 옵션을 포함하세요. 다음 예에서는 VENUE 테이블을 언로드하고 데이터 파일과 함께 매니페스트 파일을 s3://amzn-s3-demo-bucket/venue\$1pipe\$1에 씁니다.

**중요**  
MANIFEST 옵션으로 파일을 언로드하는 경우 파일을 로드할 때 COPY 명령과 함께 MANIFEST 옵션을 사용해야 합니다. 같은 접두사를 사용하여 파일을 로드하고 MANIFEST 옵션을 지정하지 않는 경우 COPY 작업에서는 매니페스트 파일이 데이터 파일이라 가정하므로 COPY가 실패하게 됩니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

그 결과는 다음과 같은 5개의 파일입니다.

```
s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00
s3://amzn-s3-demo-bucket/venue_pipe_manifest
```

다음은 매니페스트 파일 내용을 나타낸 것입니다.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0000_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0001_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0002_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0003_part_00"}
  ]
}
```

## MANIFEST VERBOSE를 사용해 VENUE 언로드
<a name="unload-examples-manifest-verbose"></a>

MANIFEST VERBOSE 옵션을 지정하면 매니페스트 파일에는 다음 섹션이 포함됩니다.
+ `entries` 섹션에는 Amazon S3 경로, 파일 크기 및 각 파일에 대한 행 수가 나열됩니다.
+ `schema` 섹션에는 열 이름, 데이터 유형, 및 각 열에 대한 차원이 나열됩니다.
+ `meta` 섹션에는 총 파일 크기 및 모든 파일의 행 수가 표시됩니다.

다음 예에서는 MANIFEST VERBOSE 옵션을 사용하여 VENUE 테이블을 언로드합니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload_venue_folder/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest verbose;
```

다음은 매니페스트 파일 내용을 나타낸 것입니다.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00", "meta": { "content_length": 32295, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00", "meta": { "content_length": 32771, "record_count": 20 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00", "meta": { "content_length": 32302, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00", "meta": { "content_length": 31810, "record_count": 15 }}
  ],
  "schema": {
    "elements": [
      {"name": "venueid", "type": { "base": "integer" }},
      {"name": "venuename", "type": { "base": "character varying", 25 }},
      {"name": "venuecity", "type": { "base": "character varying", 25 }},
      {"name": "venuestate", "type": { "base": "character varying", 25 }},
      {"name": "venueseats", "type": { "base": "character varying", 25 }}
    ]
  },
  "meta": {
    "content_length": 129178,
    "record_count": 55
  },
  "author": {
    "name": "Amazon Redshift",
    "version": "1.0.0"
  }
}
```

## 헤더로 VENUE 언로드
<a name="unload-examples-header"></a>

다음 예에서는 헤더 행으로 VENUE를 언로드합니다.

```
unload ('select * from venue where venueseats > 75000')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
header
parallel off;
```

다음은 헤더 행을 포함하는 출력 파일 내용을 보여 줍니다.

```
venueid|venuename|venuecity|venuestate|venueseats
6|New York Giants Stadium|East Rutherford|NJ|80242
78|INVESCO Field|Denver|CO|76125
83|FedExField|Landover|MD|91704
79|Arrowhead Stadium|Kansas City|MO|79451
```

## 더 작은 크기의 파일로 VENUE 언로드
<a name="unload-examples-maxfilesize"></a>

최대 파일 크기의 기본값은 6.2GB입니다. 언로드 데이터가 6.2GB보다 큰 경우 UNLOAD는 각각의 6.2GB 데이터 세그먼트에 대한 새 파일을 생성합니다. 더 작은 크기의 파일을 생성하려면 MAXFILESIZE 파라미터를 추가하세요. 이전 예에서 데이터 크기가 20GB라고 가정했을 때 다음 UNLOAD 명령은 각각 1GB씩 20개의 파일을 생성합니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
maxfilesize 1 gb;
```

## VENUE의 연속 언로드
<a name="unload-examples-serial"></a>

연속으로 언로드하려면 PARALLEL OFF를 지정하세요. 그러면 UNLOAD가 한 번에 한 개의 파일을 쓰는데, 파일당 최대 6.2GB의 데이터를 씁니다.

다음 예에서는 VENUE 테이블을 언로드하고 `s3://amzn-s3-demo-bucket/unload/`에 데이터를 연속으로 씁니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off;
```

그 결과 venue\$1serial\$1000이라는 파일이 한 개 생성됩니다.

언로드 데이터가 6.2GB보다 큰 경우 UNLOAD는 각각의 6.2GB 데이터 세그먼트에 대한 새 파일을 생성합니다. 다음 예에서는 LINEORDER 테이블을 언로드하고 `s3://amzn-s3-demo-bucket/unload/`에 데이터를 연속으로 씁니다.

```
unload ('select * from lineorder')
to 's3://amzn-s3-demo-bucket/unload/lineorder_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off gzip;
```

그 결과는 다음과 같은 일련의 파일입니다.

```
lineorder_serial_0000.gz
lineorder_serial_0001.gz
lineorder_serial_0002.gz
lineorder_serial_0003.gz
```

출력 파일을 더 효과적으로 구분하려면 해당 위치에 접두사를 포함하면 됩니다. 다음 예에서는 VENUE 테이블을 언로드하고 `s3://amzn-s3-demo-bucket/venue_pipe_`에 데이터를 씁니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

그 결과, `unload` 폴더에 다음 4개의 파일이 있으며, 이때도 4개의 조각이 있는 것으로 가정합니다.

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## 언로드 파일에서 VENUE 로드
<a name="unload-examples-load"></a>

언로드 파일 집합에서 테이블을 로드하려면 COPY 명령을 사용하여 단순히 절차를 거꾸로 진행하세요. 다음 예에서는 새 테이블인 LOADVENUE를 생성하고 이전 예에서 생성된 데이터 파일에서 테이블을 로드합니다.

```
create table loadvenue (like venue);

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

MANIFEST 옵션을 사용하여 언로드 파일로 매니페스트 파일을 생성한 경우 동일한 매니페스트 파일을 사용하여 데이터를 로드할 수 있습니다. MANIFEST 옵션과 함께 COPY 명령을 사용하면 이렇게 할 수 있습니다. 다음 예에서는 매니페스트 파일을 사용하여 데이터를 로드합니다.

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

## 암호화된 파일로 VENUE 언로드
<a name="unload-examples-unload-encrypted"></a>

다음 예에서는 AWS KMS 키를 사용하여 암호화된 파일 집합으로 VENUE 테이블을 언로드합니다. ENCRYPTED 옵션으로 매니페스트 파일을 지정하는 경우 매니페스트 파일도 암호화됩니다. 자세한 내용은 [암호화된 데이터 파일 언로드](t_unloading_encrypted_files.md) 섹션을 참조하세요.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_kms'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
kms_key_id '1234abcd-12ab-34cd-56ef-1234567890ab'
manifest
encrypted;
```

다음 예에서는 루트 대칭 키를 사용하여 암호화된 파일 집합으로 VENUE 테이블을 언로드합니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_cmk'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
encrypted;
```

## 암호화된 파일에서 VENUE 로드
<a name="unload-examples-load-encrypted"></a>

ENCRYPT 옵션과 함께 UNLOAD를 사용해 생성한 파일 집합에서 테이블을 로드하려면 COPY 명령을 사용해 이 프로세스를 거꾸로 수행하세요. 이 명령과 함께 ENCRYPTED 옵션을 사용하고 UNLOAD 명령에 사용한 것과 동일한 루트 대치 키를 지정합니다. 다음 예에서는 이전 예에서 생성된 암호화된 데이터 파일에서 LOADVENUE 테이블을 로드합니다.

```
create table loadvenue (like venue);

copy loadvenue
from 's3://amzn-s3-demo-bucket/venue_encrypt_manifest'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
manifest
encrypted;
```

## VENUE 데이터를 탭으로 구분된 파일로 언로드
<a name="unload-examples-venue-tab"></a>

```
unload ('select venueid, venuename, venueseats from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t';
```

출력 데이터 파일의 모습은 다음과 같습니다.

```
1	Toyota Park	Bridgeview	IL	0
2	Columbus Crew Stadium	Columbus	OH	0
3	RFK Stadium	Washington	DC	0
4	CommunityAmerica Ballpark	Kansas City	KS	0
5	Gillette Stadium	Foxborough	MA	68756
...
```

## 고정 폭 데이터 파일로 VENUE 언로드
<a name="unload-venue-fixed-width"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_fw_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth as 'venueid:3,venuename:39,venuecity:16,venuestate:2,venueseats:6';
```

출력 데이터 파일은 다음과 같을 것입니다.

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

## 탭으로 구분된 GZIP 압축 파일 집합으로 VENUE 언로드
<a name="unload-examples-venue-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t'
gzip;
```

## VENUE를 GZIP 압축 텍스트 파일로 언로드
<a name="unload-examples-venue-extension-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
extension 'txt.gz'
gzip;
```

## 구분 기호를 포함한 데이터 언로드
<a name="unload-examples-delimiter"></a>

다음 예에서는 ADDQUOTES 옵션을 사용하여 실제 데이터 필드 중 일부에 쉼표가 있는, 쉼표로 구분된 데이터를 언로드합니다.

먼저, 따옴표가 포함되어 있는 테이블을 만듭니다.

```
create table location (id int, location char(64));

insert into location values (1,'Phoenix, AZ'),(2,'San Diego, CA'),(3,'Chicago, IL');
```

그런 다음, ADDQUOTES 옵션을 사용하여 데이터를 언로드합니다.

```
unload ('select id, location from location')
to 's3://amzn-s3-demo-bucket/location_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter ',' addquotes;
```

언로드된 데이터 파일의 모습은 다음과 같습니다.

```
1,"Phoenix, AZ"
2,"San Diego, CA"
3,"Chicago, IL"
...
```

## 조인 쿼리의 결과 언로드
<a name="unload-examples-join"></a>

다음 예에서는 창 함수를 포함하는 조인 쿼리의 결과를 언로드합니다.

```
unload ('select venuecity, venuestate, caldate, pricepaid,
sum(pricepaid) over(partition by venuecity, venuestate
order by caldate rows between 3 preceding and 3 following) as winsum
from sales join date on sales.dateid=date.dateid
join event on event.eventid=sales.eventid
join venue on event.venueid=venue.venueid
order by 1,2')
to 's3://amzn-s3-demo-bucket/tickit/winsum'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

출력 파일의 모습은 다음과 같습니다.

```
Atlanta|GA|2008-01-04|363.00|1362.00
Atlanta|GA|2008-01-05|233.00|2030.00
Atlanta|GA|2008-01-06|310.00|3135.00
Atlanta|GA|2008-01-08|166.00|8338.00
Atlanta|GA|2008-01-11|268.00|7630.00
...
```

## NULL AS를 사용한 언로드
<a name="unload-examples-null-as"></a>

UNLOAD는 기본적으로 null 값을 빈 문자열로 출력합니다. 다음 예에서는 NULL AS를 사용하여 null에 대한 텍스트 문자열을 대체하는 방법을 보여 줍니다.

이들 예에서는 VENUE 테이블에 null 값을 추가할 것입니다.

```
update venue set venuestate = NULL
where venuecity = 'Cleveland';
```

열에 NULL이 포함되어 있음을 확인하기 위해 VENUESTATE가 null인 VENUE에서 선택합니다.

```
select * from venue where venuestate is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
```

이제, NULL AS 옵션을 사용해 VENUE 테이블을 UNLOAD하여 null 값을 문자열 '`fred`'로 바꿉니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

언로드 파일에서 다음 샘플은 null 값이 `fred`로 바뀌었음을 보여줍니다. VENUESEATS의 일부 값 역시 null이고 `fred`로 바뀐 것으로 나타납니다. VENUESEATS의 데이터 형식이 정수형이지만 UNLOAD가 언로드 파일에서 값을 텍스트로 변환한 다음, COPY가 이를 다시 정수로 변환합니다. 고정 폭 파일로 언로드하는 경우 NULL AS 문자열이 필드 폭보다 크면 안 됩니다.

```
248|Charles Playhouse|Boston|MA|0
251|Paris Hotel|Las Vegas|NV|fred
258|Tropicana Hotel|Las Vegas|NV|fred
300|Kennedy Center Opera House|Washington|DC|0
306|Lyric Opera House|Baltimore|MD|0
308|Metropolitan Opera|New York City|NY|0
  5|Gillette Stadium|Foxborough|MA|5
 22|Quicken Loans Arena|Cleveland|fred|0
101|Progressive Field|Cleveland|fred|43345
...
```

언로드 파일에서 테이블을 로드하려면 동일한 NULL AS 옵션과 함께 COPY 명령을 사용하세요.

**참고**  
NULL을 NOT NULL로 정의된 열에 로드하려고 하면 COPY 명령이 실패합니다.

```
create table loadvenuenulls (like venue);

copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

열에 빈 문자열뿐 아니라 null이 포함되어 있는지 확인하려면 LOADVENUENULLS에서 선택하고 null이 있는지 필터링하세요.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |

...
```

기본 NULL AS 동작을 사용하여 null이 포함된 테이블을 UNLOAD한 다음 기본 NULL AS 동작을 사용하여 데이터를 테이블로 다시 COPY할 수 있습니다. 하지만 대상 테이블에서 숫자가 아닌 필드는 전부 null이 아니라 빈 문자열을 포함하게 됩니다. 기본적으로 UNLOAD는 null을 빈 문자열(공백 또는 제로 길이)로 변환합니다. COPY는 숫자 열에 대해 빈 문자열을 NULL로 변환하지만, 빈 문자열을 숫자가 아닌 열에 삽입합니다. 다음 예에서는 기본 NULL AS 동작을 사용하여 UNLOAD와 COPY를 차례대로 수행하는 방법을 보여줍니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

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

이 경우에는 null을 필터링할 때 VENUESEATS가 null을 포함했던 행만 선택됩니다. 테이블(VENUE)에서 VENUESTATE가 null을 포함한 경우 대상 테이블(LOADVENUENULLS)의 VENUESTATE는 빈 문자열을 포함합니다.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
     251 | Paris Hotel              | Las Vegas | NV         |
...
```

빈 문자열을 NULL로서 숫자가 아닌 열에 로드하려면 EMPTYASNULL 또는 BLANKSASNULL 옵션을 포함하세요. 둘 다 사용해도 괜찮습니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

truncate loadvenuenulls;
copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' EMPTYASNULL;
```

열에 공백이나 빈 문자열뿐 아니라 NULL이 포함되어 있는지 확인하려면 LOADVENUENULLS에서 선택하고 null이 있는지 필터링합니다.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |
     ...
```

## ALLOWOVERWRITE 파라미터를 사용한 언로드
<a name="unload-examples-allowoverwrite"></a>

기본적으로 UNLOAD는 대상 버킷의 기존 파일을 덮어쓰지 않습니다. 예를 들어 대상 버킷에서 파일을 수정하지 않고 같은 UNLOAD 문을 두 번 실행하는 경우 두 번째 UNLOAD는 실패하게 됩니다. 매니페스트 파일을 포함하여 기존 파일을 덮어쓰려면 ALLOWOVERWRITE 옵션을 지정합니다.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest allowoverwrite;
```

## PARALLEL 및 MANIFEST 파라미터를 사용하여 EVENT 테이블 언로드
<a name="unload-examples-manifest-parallel"></a>

테이블을 병렬로 언로드하고 매니페스트 파일을 생성할 수 있습니다. Amazon S3 데이터 파일은 모두 동일한 수준에서 생성되며 이름에 `0000_part_00` 패턴이 접미사로 붙습니다. 매니페스트 파일은 데이터 파일과 동일한 폴더 수준에 있으며 `manifest` 텍스트가 접미사로 붙습니다. 다음 SQL은 EVENT 테이블을 언로드하고 기본 이름 `parallel`로 파일을 생성합니다.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/parallel'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel on
manifest;
```

Amazon S3 파일 목록은 다음과 유사합니다.

```
 Name                       Last modified                        Size                  
 parallel0000_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB  
 parallel0001_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0002_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB
 parallel0003_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 51.1 KB
 parallel0004_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.6 KB
 parallel0005_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0006_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.1 KB
 parallel0007_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 55.9 KB
 parallelmanifest       -   August 2, 2023, 14:54:39 (UTC-07:00) 886.0 B
```

`parallelmanifest` 파일 콘텐츠는 다음과 유사합니다.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/parallel0000_part_00", "meta": { "content_length": 53316 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0001_part_00", "meta": { "content_length": 54704 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0002_part_00", "meta": { "content_length": 53326 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0003_part_00", "meta": { "content_length": 52356 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0004_part_00", "meta": { "content_length": 55933 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0005_part_00", "meta": { "content_length": 54648 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0006_part_00", "meta": { "content_length": 55436 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0007_part_00", "meta": { "content_length": 57272 }}
  ]
}
```

## PARALLEL OFF 및 MANIFEST 파라미터를 사용하여 EVENT 테이블 언로드
<a name="unload-examples-manifest-serial"></a>

테이블을 연속적으로 언로드하고(PARALLEL OFF) 매니페스트 파일을 생성할 수 있습니다. Amazon S3 데이터 파일은 모두 동일한 수준에서 생성되며 이름에 `0000` 패턴이 접미사로 붙습니다. 매니페스트 파일은 데이터 파일과 동일한 폴더 수준에 있으며 `manifest` 텍스트가 접미사로 붙습니다.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/serial'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel off
manifest;
```

Amazon S3 파일 목록은 다음과 유사합니다.

```
 Name                       Last modified                        Size                  
 serial0000             -   August 2, 2023, 15:54:39 (UTC-07:00) 426.7 KB  
 serialmanifest         -   August 2, 2023, 15:54:39 (UTC-07:00) 120.0 B
```

`serialmanifest` 파일 콘텐츠는 다음과 유사합니다.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/serial000", "meta": { "content_length": 436991 }}
  ]
}
```

## PARTITION BY 및 MANIFEST 파라미터를 사용하여 EVENT 테이블 언로드
<a name="unload-examples-manifest-partition"></a>

파티션별로 테이블을 언로드하고 매니페스트 파일을 생성할 수 있습니다. Amazon S3에 하위 파티션 폴더가 있는 새 폴더가 생성되고 하위 폴더의 데이터 파일은 `0000_par_00`과 유사한 이름 패턴을 갖습니다. 매니페스트 파일은 하위 폴더와 동일한 폴더 레벨에 있으며 이름은 `manifest`입니다.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/partition'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
partition by (eventname)
manifest;
```

Amazon S3 파일 목록은 다음과 유사합니다.

```
 Name                   Type     Last modified                        Size                  
 partition           	Folder
```

`partition` 폴더에는 파티션 이름을 가진 하위 폴더와 매니페스트 파일이 있습니다. `partition` 폴더의 폴더 목록 하단 부분은 다음과 유사합니다.

```
 Name                   Type      Last modified                        Size                  
 ...
 eventname=Zucchero/    Folder 
 eventname=Zumanity/    Folder 
 eventname=ZZ Top/      Folder  
 manifest          	    -	    August 2, 2023, 15:54:39 (UTC-07:00) 467.6 KB
```

`eventname=Zucchero/` 폴더에는 다음과 유사한 데이터 파일이 있습니다.

```
 Name               Last modified                        Size                  
 0000_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 70.0 B
 0001_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 106.0 B
 0002_part_00	-   August 2, 2023, 15:59:15 (UTC-07:00) 70.0 B
 0004_part_00	-   August 2, 2023, 15:59:17 (UTC-07:00) 141.0 B
 0006_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 35.0 B
 0007_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 108.0 B
```

`manifest` 파일 콘텐츠의 하단은 다음과 유사합니다.

```
{
  "entries": [
    ...
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zucchero/007_part_00", "meta": { "content_length": 108 }},
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zumanity/007_part_00", "meta": { "content_length": 72 }}
  ]
}
```

## MAXFILESIZE, ROWGROUPSIZE 및 MANIFEST 파라미터를 사용하여 EVENT 테이블 언로드
<a name="unload-examples-manifest-maxsize"></a>

테이블을 병렬로 언로드하고 매니페스트 파일을 생성할 수 있습니다. Amazon S3 데이터 파일은 모두 동일한 수준에서 생성되며 이름에 `0000_part_00` 패턴이 접미사로 붙습니다. 생성된 Parquet 데이터 파일은 256MB, 행 그룹 크기는 128MB로 제한됩니다. 매니페스트 파일은 데이터 파일과 동일한 폴더 수준에 있으며 `manifest`가 접미사로 붙습니다.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/eventsize'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
maxfilesize 256 MB
rowgroupsize 128 MB
parallel on
parquet
manifest;
```

Amazon S3 파일 목록은 다음과 유사합니다.

```
 Name                            Type      Last modified                        Size 
 eventsize0000_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.5 KB
 eventsize0001_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0002_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.4 KB
 eventsize0003_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.0 KB
 eventsize0004_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.3 KB
 eventsize0005_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0006_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.0 KB
 eventsize0007_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.6 KB
 eventsizemanifest                 -       August 2, 2023, 17:35:21 (UTC-07:00) 958.0 B
```

`eventsizemanifest` 파일 콘텐츠는 다음과 유사합니다.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/eventsize0000_part_00.parquet", "meta": { "content_length": 25130 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0001_part_00.parquet", "meta": { "content_length": 25428 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0002_part_00.parquet", "meta": { "content_length": 25025 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0003_part_00.parquet", "meta": { "content_length": 24554 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0004_part_00.parquet", "meta": { "content_length": 25918 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0005_part_00.parquet", "meta": { "content_length": 25362 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0006_part_00.parquet", "meta": { "content_length": 25647 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0007_part_00.parquet", "meta": { "content_length": 26256 }}
  ]
}
```