열 데이터 형식 변경 - Amazon Athena

열 데이터 형식 변경

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

고려 사항

열에 대해 다른 데이터 형식을 사용하려는 경우 다음 사항을 고려해야 합니다.

  • 대부분의 경우 열의 데이터 형식을 직접 변경할 수는 없습니다. 대신 Athena 테이블을 다시 생성하고 새 데이터 형식으로 열을 정의합니다.

  • 특정 데이터 형식만 다른 데이터 형식으로 읽을 수 있습니다. 처리할 수 있는 데이터 형식은 본 섹션의 테이블을 참조하세요.

  • Parquet 및 ORC의 데이터인 경우 테이블이 파티셔닝되지 않으면 열에 대해 다른 데이터 형식을 사용할 수 없습니다.

  • Parquet 및 ORC 형식의 분할된 테이블의 경우 파티션의 열 형식은 다른 파티션의 열 형식과 다를 수 있으며, Athena는 가능하다면 원하는 형식으로 CAST합니다. 자세한 내용은 파티션이 있는 테이블의 스키마 불일치 오류 방지을 참조하세요.

  • LazySimpleSerDe를 사용하여 생성한 테이블의 경우에만 ALTER TABLE REPLACE COLUMNS 문을 사용하여 기존 열을 다른 데이터 형식으로 바꿀 수 있지만 유지하려는 기존 열도 모두 해당 명령문에서 다시 정의해야 합니다. 그렇지 않으면 해당 열이 삭제됩니다. 자세한 내용은 ALTER TABLE REPLACE COLUMNS 단원을 참조하십시오.

  • Apache Iceberg 테이블의 경우에만 ALTER TABLE CHANGE COLUMN 문을 사용하여 열의 데이터 형식을 변경할 수 있습니다. ALTER TABLE REPLACE COLUMNS는 Iceberg 테이블에서 지원되지 않습니다. 자세한 내용은 Iceberg 테이블 스키마 개선 단원을 참조하십시오.

중요

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

호환되는 데이터 형식 사용

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

원래 데이터 형식 사용 가능한 대상 데이터 형식
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;