DB 클러스터 스냅샷 내보내기 고려 사항 - Amazon Aurora

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열이 테이블의 프라이머리 키이고 최소값과 최대값이 1001000이라고 가정해 보겠습니다. 9개의 파티션이 있는 이 테이블을 내보내려고 하면 다음과 같은 병렬 쿼리를 사용하여 테이블을 읽습니다.

    SELECT * FROM table WHERE id <= 100 AND id < 200 SELECT * FROM table WHERE id <= 200 AND id < 300

    여기에서 part-00000-random_uuid.gz.parquet~part-00008-random_uuid.gz.parquet에 해당하는 9개의 파일이 생성됩니다. 그러나 200~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