데이터 형식
데이터 형식 (Data types)
Amazon S3 Select로 객체 내용을 조회할 때 다루게 되는 기본 데이터 형식이 무엇인지 정리한 페이지예요. 어떤 형식이 있고, 형식 변환이 어떻게 일어나는지, 그리고 Parquet 형식이 어떻게 매핑되는지 살펴볼게요.
출처: 문서
본문
중대한 사항: Amazon S3 Select는 더 이상 신규 고객에게 제공되지 않아요. 기존 Amazon S3 Select 고객은 기존과 동일하게 기능을 계속 사용할 수 있어요.
Amazon S3 Select는 여러 기본(primitive) 데이터 형식을 지원해요.
데이터 형식 변환
일반적인 규칙은 CAST 함수가 정의되어 있으면 그것을 따르는 거예요. CAST가 정의되어 있지 않으면 모든 입력 데이터는 문자열로 취급돼요. 그 경우 필요할 때 입력 데이터를 관련 데이터 형식으로 직접 캐스팅해야 해요.
CAST 함수에 대한 자세한 내용은 변환 함수 (Conversion functions)를 참고해요.
지원되는 데이터 형식
Amazon S3 Select는 다음과 같은 기본 데이터 형식 집합을 지원해요.
| 이름 | 설명 | 예시 |
|---|---|---|
| bool | TRUE 또는 FALSE인 Boolean 값 | FALSE |
| int , integer | -9,223,372,036,854,775,808에서 9,223,372,036,854,775,807 범위의 8바이트 부호 있는 정수 | 100000 |
| string | UTF8로 인코딩된 가변 길이 문자열. 기본 한도는 1자이고, 최대 문자 한도는 2,147,483,647이에요. | 'xyz' |
| float | 8바이트 부동소수점 수 | CAST(0.456 AS FLOAT) |
| decimal , numeric | 최대 정밀도 38(즉 최대 유효 자릿수)과 -2^31에서 2^31-1 범위의 스케일(즉 10진 지수)을 갖는 10진수. 참고: Amazon S3 Select는 둘을 동시에 제공하면 스케일과 정밀도를 무시해요. | 123.456 |
| timestamp | 타임스탬프는 특정 시점을 나타내고, 항상 로컬 오프셋을 포함하며, 임의 정밀도를 지원해요. 텍스트 형식에서 타임스탬프는 날짜·시간 형식에 관한 W3C 규칙을 따르는데, 정밀도가 하루 이상이 아닌 경우 반드시 문자 T로 끝나야 해요. 소수 초는 허용되며 자릿수 최소 1개, 최대 무제한이에요. 로컬 시간 오프셋은 UTC로부터의 시:분 오프셋 또는 UTC 기준 로컬 시간을 뜻하는 문자 Z로 표현할 수 있어요. 로컬 시간 오프셋은 시간이 있는 타임스탬프에 필수이고, 날짜 값에는 허용되지 않아요. | CAST('2007-04-05T14:30Z' AS TIMESTAMP) |
지원되는 Parquet 형식
Amazon S3 Select는 다음과 같은 Parquet 형식을 지원해요.
- DATE
- DECIMAL
- ENUM
- INT(8)
- INT(16)
- INT(32)
- INT(64)
- LIST 참고: LIST Parquet 형식 출력의 경우 Amazon S3 Select는 JSON 형식만 지원해요. 다만 쿼리가 데이터를 단순 값으로 제한하면 LIST Parquet 형식도 CSV 형식으로 조회할 수 있어요.
- STRING
- TIMESTAMP 지원 정밀도(MILLIS / MICROS / NANOS) 참고: INT(96)으로 저장된 타임스탬프는 지원되지 않아요. INT(64) 형식의 범위 때문에 NANOS 단위를 쓰는 타임스탬프는 1677-09-21 00:12:43에서 2262-04-11 23:47:16 사이의 값만 나타낼 수 있어요. 이 범위를 벗어난 값은 NANOS 단위로 표현할 수 없어요.
Parquet 형식과 Amazon S3 Select 지원 데이터 형식의 매핑
| Parquet 형식 | 지원 데이터 형식 |
|---|---|
| DATE | timestamp |
| DECIMAL | decimal , numeric |
| ENUM | string |
| INT(8) | int , integer |
| INT(16) | int , integer |
| INT(32) | int , integer |
| INT(64) | decimal , numeric |
| LIST | 목록의 각 Parquet 형식이 해당 데이터 형식으로 매핑돼요. |
| STRING | string |
| TIMESTAMP | timestamp |