Amazon RDS용 Amazon S3 버킷으로 내보낼 때 데이터 변환
DB 스냅샷을 Amazon S3 버킷으로 내보낼 때 Amazon RDS는 데이터를 Parquet 형식으로 변환하고, 데이터를 Parquet 형식으로 내보내며, 데이터를 Parquet 형식으로 저장합니다. Parquet에 대한 자세한 내용은 Apache Parquet
Apache Parquet은 다음과 같은 프리미티브 유형 중 하나로 모든 데이터를 저장합니다.
-
BOOLEAN
-
INT32
-
INT64
-
INT96
-
FLOAT
-
DOUBLE
-
BYTE_ARRAY – 가변 길이 바이트 배열(이진수라고도 함)
-
FIXED_LEN_BYTE_ARRAY – 값이 일정한 크기를 가질 때 사용되는 고정 길이 바이트 배열
Parquet 데이터 유형은 형식을 읽고 쓸 때 복잡성을 줄이기 위한 것입니다. Parquet은 프리미티브 유형을 확장할 수 있도록 논리적 유형을 제공합니다. 논리적 유형은 LogicalType 메타 데이터 필드의 데이터를 이용으로 주석으로 구현됩니다. 논리적 유형 주석은 프리미티브 유형을 해석하는 방법을 설명합니다.
STRING 논리적 유형에 BYTE_ARRAY 유형이 주석으로 달려 있으면 바이트 배열이 UTF-8로 인코딩된 문자열로 해석되어야 한다는 뜻입니다. 내보내기 태스크가 완료되면 Amazon RDS에서 문자열 변환이 발생했는지를 알려줍니다. 내보낸 기초 데이터는 항상 소스의 데이터와 동일합니다. 그러나 UTF-8에서의 인코딩 차이로 인해 일부 문자는 Athena 같은 도구에서 읽을 때 소스와 다르게 나타날 수 있습니다.
자세한 내용은 Parquet 설명서의 Parquet 논리적 유형 정의
Parquet로 MySQL 및 MariaDB 데이터 유형 매핑
다음 표는 데이터를 변환해 Amazon S3로 내보낼 때 MySQL 및 MariaDB 데이터 유형에서 Parquet 데이터 유형으로의 매핑을 보여줍니다.
| 소스 데이터 유형 | Parquet 프리미티브 유형 | 논리적 유형 주석 | 변환 노트 |
|---|---|---|---|
| 숫자 데이터 유형 | |||
| BIGINT | INT64 | ||
| BIGINT UNSIGNED | FIXED_LEN_BYTE_ARRAY(9) | DECIMAL(20,0) | Parquet는 서명된 유형만 지원하므로 매핑에는 BIGINT_UNSIGNED 유형을 저장하기 위해 추가 바이트(8 + 1)가 필요합니다. |
| BIT | BYTE_ARRAY | ||
| DECIMAL | INT32 | DECIMAL (p,s) | 소스 값이 231 미만이면 INT32로 저장됩니다. |
| INT64 | DECIMAL (p,s) | 소스 값이 231 이상이지만 263 미만인 경우 INT64로 저장됩니다. | |
| FIXED_LEN_BYTE_ARRAY(N) | DECIMAL (p,s) | 소스 값이 263 이상이면 FIXED_LEN_BYTE_ARRAY(N)로 저장됩니다. | |
| BYTE_ARRAY | STRING | Parquet는 38보다 큰 십진수 정밀도를 지원하지 않습니다. 십진수 값은 BYTE_ARRAY 유형의 문자열로 변환되고 UTF8로 인코딩됩니다. | |
| DOUBLE | DOUBLE | ||
| FLOAT | DOUBLE | ||
| INT | INT32 | ||
| INT UNSIGNED | INT64 | ||
| MEDIUMINT | INT32 | ||
| MEDIUMINT UNSIGNED | INT64 | ||
| NUMERIC | INT32 | DECIMAL (p,s) |
소스 값이 231 미만이면 INT32로 저장됩니다. |
| INT64 | DECIMAL (p,s) | 소스 값이 231 이상이지만 263 미만인 경우 INT64로 저장됩니다. | |
| FIXED_LEN_ARRAY(N) | DECIMAL (p,s) | 소스 값이 263 이상이면 FIXED_LEN_BYTE_ARRAY(N)로 저장됩니다. | |
| BYTE_ARRAY | STRING | Parquet는 38보다 큰 숫자 정밀도를 지원하지 않습니다. 이 숫자 값은 BYTE_ARRAY 유형의 문자열로 변환되고 UTF8로 인코딩됩니다. | |
| SMALLINT | INT32 | ||
| SMALLINT UNSIGNED | INT32 | ||
| TINYINT | INT32 | ||
| TINYINT UNSIGNED | INT32 | INT(16, true) | |
| 문자열 데이터 유형 | |||
| BINARY | BYTE_ARRAY | ||
| BLOB | BYTE_ARRAY | ||
| CHAR | BYTE_ARRAY | ||
| ENUM | BYTE_ARRAY | STRING | |
| LINESTRING | BYTE_ARRAY | ||
| LONGBLOB | BYTE_ARRAY | ||
| LONGTEXT | BYTE_ARRAY | STRING | |
| MEDIUMBLOB | BYTE_ARRAY | ||
| MEDIUMTEXT | BYTE_ARRAY | STRING | |
| MULTILINESTRING | BYTE_ARRAY | ||
| SET | BYTE_ARRAY | STRING | |
| TEXT | BYTE_ARRAY | STRING | |
| TINYBLOB | BYTE_ARRAY | ||
| TINYTEXT | BYTE_ARRAY | STRING | |
| VARBINARY | BYTE_ARRAY | ||
| VARCHAR | BYTE_ARRAY | STRING | |
| 날짜 및 시간 데이터 유형 | |||
| DATE | BYTE_ARRAY | STRING | 날짜는 BYTE_ARRAY 유형의 문자열로 변환되고 UTF8로 인코딩됩니다. |
| DATETIME | INT64 | TIMESTAMP_MICROS | |
| TIME | BYTE_ARRAY | STRING | TIME 유형은 BYTE_ARRAY의 문자열로 변환되고 UTF8로 인코딩됩니다. |
| TIMESTAMP | INT64 | TIMESTAMP_MICROS | |
| YEAR | INT32 | ||
| 기하학적 데이터 유형 | |||
| GEOMETRY | BYTE_ARRAY | ||
| GEOMETRYCOLLECTION | BYTE_ARRAY | ||
| MULTIPOINT | BYTE_ARRAY | ||
| MULTIPOLYGON | BYTE_ARRAY | ||
| POINT | BYTE_ARRAY | ||
| POLYGON | BYTE_ARRAY | ||
| JSON 데이터 유형 | |||
| JSON | BYTE_ARRAY | STRING | |
Parquet로 PostgreSQL 데이터 유형 매핑
다음 표는 데이터를 변환해 Amazon S3로 내보낼 때 PostgreSQL 데이터 유형에서 Parquet 데이터 유형으로의 매핑을 보여줍니다.
| PostgreSQL 데이터 형식 | Parquet 프리미티브 유형 | 논리적 유형 주석 | 매핑 노트 |
|---|---|---|---|
| 숫자 데이터 유형 | |||
| BIGINT | INT64 | ||
| BIGSERIAL | INT64 | ||
| DECIMAL | BYTE_ARRAY | STRING | DECIMAL 유형은 BYTE_ARRAY 유형의 문자열로 변환되고 UTF8로 인코딩됩니다. 이 변환은 데이터 정밀도와 숫자(NaN)가 아닌 데이터 값으로 인해 복잡해지는 것을 피하기 위한 것입니다. |
| DOUBLE PRECISION | DOUBLE | ||
| INTEGER | INT32 | ||
| MONEY | BYTE_ARRAY | STRING | |
| REAL | FLOAT | ||
| SERIAL | INT32 | ||
| SMALLINT | INT32 | INT(16, true) | |
| SMALLSERIAL | INT32 | INT(16, true) | |
| 문자열 및 관련 데이터 유형 | |||
| ARRAY | BYTE_ARRAY | STRING |
배열은 문자열로 변환되고 BINARY(UTF8)로 인코딩됩니다. 이 변환은 데이터 정밀도와 숫자(NaN)가 아닌 데이터 값, 그리고 시간 데이터 값으로 인해 복잡해지는 것을 피하기 위한 것입니다. |
| BIT | BYTE_ARRAY | STRING | |
| BIT VARYING | BYTE_ARRAY | STRING | |
| BYTEA | BINARY | ||
| CHAR | BYTE_ARRAY | STRING | |
| CHAR(N) | BYTE_ARRAY | STRING | |
| ENUM | BYTE_ARRAY | STRING | |
| NAME | BYTE_ARRAY | STRING | |
| TEXT | BYTE_ARRAY | STRING | |
| TEXT SEARCH | BYTE_ARRAY | STRING | |
| VARCHAR(N) | BYTE_ARRAY | STRING | |
| XML | BYTE_ARRAY | STRING | |
| 날짜 및 시간 데이터 유형 | |||
| DATE | BYTE_ARRAY | STRING | |
| INTERVAL | BYTE_ARRAY | STRING | |
| TIME | BYTE_ARRAY | STRING | |
| TIME WITH TIME ZONE | BYTE_ARRAY | STRING | |
| TIMESTAMP | BYTE_ARRAY | STRING | |
| TIMESTAMP(시간대 사용) | BYTE_ARRAY | STRING | |
| 기하학적 데이터 유형 | |||
| BOX | BYTE_ARRAY | STRING | |
| CIRCLE | BYTE_ARRAY | STRING | |
| LINE | BYTE_ARRAY | STRING | |
| LINESEGMENT | BYTE_ARRAY | STRING | |
| PATH | BYTE_ARRAY | STRING | |
| POINT | BYTE_ARRAY | STRING | |
| POLYGON | BYTE_ARRAY | STRING | |
| JSON 데이터 유형 | |||
| JSON | BYTE_ARRAY | STRING | |
| JSONB | BYTE_ARRAY | STRING | |
| 기타 데이터 유형 | |||
| BOOLEAN | BOOLEAN | ||
| CIDR | BYTE_ARRAY | STRING | 네트워크 데이터 유형 |
| COMPOSITE | BYTE_ARRAY | STRING | |
| DOMAIN | BYTE_ARRAY | STRING | |
| INET | BYTE_ARRAY | STRING | 네트워크 데이터 유형 |
| MACADDR | BYTE_ARRAY | STRING | |
| OBJECT IDENTIFIER | 해당 사항 없음 | ||
| PG_LSN | BYTE_ARRAY | STRING | |
| RANGE | BYTE_ARRAY | STRING | |
| UUID | BYTE_ARRAY | STRING | |