

 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_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 }}
  ]
}
```