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_index
00000
으로 시작되는 여러 개의 파일이 생성됩니다.파티션 인덱스 시퀀스에 간격이 있을 수 있습니다. 이러한 간격은 테이블의 범위 지정 쿼리에서 각 파티션을 가져오기 때문에 발생합니다. 해당 파티션 범위에 데이터가 없는 경우 해당 시퀀스 번호는 건너뛰게 됩니다.
예를 들어
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_index
part-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 |