

# 열 데이터 형식 변경
<a name="updates-changing-column-type"></a>

기존 유형에 필요한 양의 정보를 더 이상 보관할 수 없는 경우 다른 열 유형을 사용하는 것이 좋습니다. 예를 들어 ID 열의 값은 `INT` 데이터 형식의 크기를 초과할 수 있으므로 `BIGINT` 데이터 형식을 사용해야 합니다.

## 고려 사항
<a name="updates-changing-column-type-considerations"></a>

열에 대해 다른 데이터 형식을 사용하려는 경우 다음 사항을 고려해야 합니다.
+ 대부분의 경우 열의 데이터 형식을 직접 변경할 수는 없습니다. 대신 Athena 테이블을 다시 생성하고 새 데이터 형식으로 열을 정의합니다.
+ 특정 데이터 형식만 다른 데이터 형식으로 읽을 수 있습니다. 처리할 수 있는 데이터 형식은 본 섹션의 테이블을 참조하세요.
+ Parquet 및 ORC의 데이터인 경우 테이블이 파티셔닝되지 않으면 열에 대해 다른 데이터 형식을 사용할 수 없습니다.
+ Parquet 및 ORC 형식의 분할된 테이블의 경우 파티션의 열 형식은 다른 파티션의 열 형식과 다를 수 있으며, Athena는 가능하다면 원하는 형식으로 `CAST`합니다. 자세한 내용은 [파티션이 있는 테이블의 스키마 불일치 오류 방지](updates-and-partitions.md#partitions-dealing-with-schema-mismatch-errors) 섹션을 참조하세요.
+ [LazySimpleSerDe](lazy-simple-serde.md)를 사용하여 생성한 테이블의 경우에만 `ALTER TABLE REPLACE COLUMNS` 문을 사용하여 기존 열을 다른 데이터 형식으로 바꿀 수 있지만 유지하려는 기존 열도 모두 해당 명령문에서 다시 정의해야 합니다. 그렇지 않으면 해당 열이 삭제됩니다. 자세한 내용은 [ALTER TABLE REPLACE COLUMNS](alter-table-replace-columns.md) 섹션을 참조하세요.
+ Apache Iceberg 테이블의 경우에만 [ALTER TABLE CHANGE COLUMN](querying-iceberg-alter-table-change-column.md) 문을 사용하여 열의 데이터 형식을 변경할 수 있습니다. `ALTER TABLE REPLACE COLUMNS`는 Iceberg 테이블에서 지원되지 않습니다. 자세한 내용은 [Iceberg 테이블 스키마 개선](querying-iceberg-evolving-table-schema.md) 섹션을 참조하세요.

**중요**  
데이터 형식 변환을 수행하기 전에 쿼리를 테스트 및 확인하는 것이 좋습니다. Athena에서 대상 데이터 형식을 사용할 수 없는 경우 `CREATE TABLE` 쿼리에 실패할 수 있습니다.

## 호환되는 데이터 형식 사용
<a name="updates-changing-column-type-use-compatible-data-types"></a>

가능하면 호환되는 데이터 형식을 사용하세요. 다음 표에는 다른 데이터 형식으로 처리될 수 있는 데이터 형식이 나열되어 있습니다.


| 원래 데이터 형식 | 사용 가능한 대상 데이터 형식 | 
| --- | --- | 
| STRING | BYTE, TINYINT, SMALLINT, INT, BIGINT | 
| BYTE | TINYINT, SMALLINT, INT, BIGINT | 
| TINYINT | SMALLINT, INT, BIGINT | 
| SMALLINT | INT, BIGINT | 
| INT | BIGINT | 
| FLOAT | DOUBLE | 

다음 예제에서는 원래 `orders_json` 테이블에 대해 `CREATE TABLE` 문을 사용하여 `orders_json_bigint`라는 새 테이블을 생성합니다. 새 테이블은 `INT` 대신 `BIGINT`를 ``o_shippriority`` 열의 데이터 형식으로 사용합니다.

```
CREATE EXTERNAL TABLE orders_json_bigint (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_totalprice` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` BIGINT
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket/orders_json';
```

데이터 형식이 변경되기 전에 원래 `SELECT` 쿼리와 비슷한 다음 쿼리가 실행됩니다:

```
Select * from orders_json 
LIMIT 10;
```