DB 클러스터 스냅샷 내보내기 고려 사항
제한 사항
DB 스냅샷 데이터를 Amazon S3로 내보내는 데는 다음과 같은 제한 사항이 적용됩니다.
-
동일한 DB 클러스터 스냅샷에 대해 여러 내보내기 작업을 동시에 실행할 수 없습니다. 이는 전체 및 부분 내보내기에 모두 적용됩니다.
-
AWS 계정당 최대 5개의 DB 스냅샷 내보내기 작업을 동시에 수행할 수 있습니다.
-
스냅샷 데이터를 Aurora Serverless v1 DB 클러스터에서 S3으로 내보낼 수 없습니다.
-
S3로 내보내는 경우 콜론(:)이 포함된 S3 접두사를 지원하지 않습니다.
-
내보내는 동안 S3 파일 경로의 다음 문자는 밑줄(_)로 변환됩니다.
\ ` " (space) -
데이터베이스, 스키마 또는 테이블의 이름에 다음 문자가 아닌 문자가 있으면 부분 내보내기가 지원되지 않습니다. 그러나 전체 DB 스냅샷을 내보낼 수는 있습니다.
-
라틴 문자(A–Z)
-
숫자(0–9)
-
달러 기호($)
-
밑줄(_)
-
-
공백( )과 특정 문자는 데이터베이스 테이블 열 이름에서 지원되지 않습니다. 열 이름에 다음 문자가 포함되어 있는 테이블은 내보내기를 수행하는 동안 건너뛰기가 됩니다.
, ; { } ( ) \n \t = (space) -
이름에 슬래시(/)가 포함되어 있는 테이블은 내보내기를 수행하는 동안 생략됩니다.
-
Aurora PostgreSQL 임시 테이블과 로깅되지 않는 테이블은 내보내기 중에 건너뛰게 됩니다.
-
데이터에 500MB에 근접하거나 이보다 큰 객체(예: BLOB 또는 CLOB)가 포함되어 있으면 내보내기가 실패합니다.
-
테이블에 2GB에 가깝거나 그보다 큰 행이 있으면 내보내기 중 테이블을 건너뜁니다.
-
부분 내보내기의 경우
ExportOnly목록의 최대 크기는 200KB입니다. -
각 내보내기 작업에 고유한 이름을 사용하는 것이 좋습니다. 고유한 작업 이름을 사용하지 않으면 다음 오류 메시지가 표시될 수 있습니다.
ExportTaskAlreadyExistsFault: StartExportTask 작업을 호출하는 동안 오류(ExportTaskAlreadyExists)가 발생했습니다. ID가xxxxx인 내보내기 작업이 이미 존재합니다. -
데이터를 S3로 내보내는 동안 스냅샷을 삭제할 수 있지만, 내보내기 태스크가 완료될 때까지 해당 스냅샷에 대한 스토리지 비용은 계속 청구됩니다.
-
내보낸 스냅샷 데이터를 S3에서 새 DB 클러스터로 복원할 수 없습니다.
파일 명명 규칙
특정 테이블에 대해 내보낸 데이터는 형식으로 저장됩니다. 여기서 기본 접두사는 다음과 같습니다.base_prefix/files
export_identifier/database_name/schema_name.table_name/
예:
export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/
파일의 명명 규칙은 두 가지가 있습니다.
-
현행 규칙:
batch_index/part-partition_index-random_uuid.format-based_extension배치 인덱스는 테이블에서 읽은 데이터 배치를 나타내는 시퀀스 번호입니다. 테이블을 병렬로 내보낼 작은 청크로 파티셔닝할 수 없는 경우에는 배치 인덱스가 여러 개 생성됩니다. 테이블이 여러 테이블로 파티셔닝된 경우에도 마찬가지입니다. 기본 테이블의 각 테이블 파티션마다 하나씩, 배치 인덱스가 여러 개 생성됩니다.
테이블을 병렬로 읽을 작은 청크로 파티셔닝할 수 있는 경우에는 배치 인덱스
1폴더 하나만 생성됩니다.배치 인덱스 폴더에는 테이블 데이터를 포함하는 하나 이상의 Parquet 파일이 있습니다. Parquet 파일 이름의 접두사는
part-입니다. 테이블이 파티셔닝된 경우 파티션 인덱스partition_index00000으로 시작되는 여러 개의 파일이 생성됩니다.파티션 인덱스 시퀀스에 간격이 있을 수 있습니다. 이러한 간격은 테이블의 범위 지정 쿼리에서 각 파티션을 가져오기 때문에 발생합니다. 해당 파티션 범위에 데이터가 없는 경우 해당 시퀀스 번호는 건너뛰게 됩니다.
예를 들어
id열이 테이블의 프라이머리 키이고 최소값과 최대값이100및1000이라고 가정해 보겠습니다. 9개의 파티션이 있는 이 테이블을 내보내려고 하면 다음과 같은 병렬 쿼리를 사용하여 테이블을 읽습니다.SELECT * FROM table WHERE id <= 100 AND id < 200 SELECT * FROM table WHERE id <= 200 AND id < 300여기에서
part-00000-~random_uuid.gz.parquetpart-00008-에 해당하는 9개의 파일이 생성됩니다. 그러나random_uuid.gz.parquet200~350사이의 ID가 있는 행이 없으면 완료된 파티션 중 하나가 비어 있게 되고 해당 파티션에 대한 파일이 생성되지 않습니다. 이전 예제에서는part-00001-이 생성되지 않았습니다.random_uuid.gz.parquet -
이전 규칙:
part-partition_index-random_uuid.format-based_extension이는 현재 규칙과 동일하지만
접두사는 없습니다. 예를 들면 다음과 같습니다.batch_indexpart-00000-c5a881bb-58ff-4ee6-1111-b41ecff340a3-c000.gz.parquet part-00001-d7a881cc-88cc-5ab7-2222-c41ecab340a4-c000.gz.parquet part-00002-f5a991ab-59aa-7fa6-3333-d41eccd340a7-c000.gz.parquet
파일 명명 규칙은 변경될 수 있습니다. 따라서 대상 테이블을 읽을 때 테이블의 기본 접두사 내에 있는 모든 내용을 읽는 것이 좋습니다.
Amazon S3 버킷으로 내보내기를 할 때 데이터 변환
DB 스냅샷을 Amazon S3 버킷으로 내보낼 때 Amazon Aurora는 데이터를 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 Aurora에서 문자열 변환이 발생했는지를 알려줍니다. 내보낸 기초 데이터는 항상 소스의 데이터와 동일합니다. 그러나 UTF-8에서의 인코딩 차이로 인해 일부 문자는 Athena 같은 도구에서 읽을 때 소스와 다르게 나타날 수 있습니다.
자세한 내용은 Parquet 설명서의 Parquet 논리적 유형 정의
Parquet로 MySQL 데이터 유형 매핑
다음 테이블은 데이터를 변환하여 Amazon S3로 내보낼 때 MySQL 데이터 유형에서 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 | |