DB クラスタースナップショットのエクスポートに関する考慮事項
制限
DB スナップショットデータの Amazon S3 へのエクスポートには、次の制限があります。
-
同じ DB クラスタースナップショットに対して複数のエクスポートタスクを同時に実行することはできません。これは、フルエクスポートと部分エクスポートの両方に当てはまります。
-
1 つの AWS アカウント につき、最大 5 つの DB スナップショットエクスポートタスクを同時に実行できます。
-
Aurora Serverless v1 DB クラスターから S3 にスナップショットデータをエクスポートできません。
-
S3 へのエクスポートでは、コロン (:) を含む S3 プレフィックスをサポートしていません。
-
S3 ファイルパスの次の文字は、エクスポート時にアンダースコア (_) に変換されます。
\ ` " (space)
-
データベース、スキーマ、またはテーブルの名前に次の文字以外の文字が含まれている場合、部分的なエクスポートはサポートされません。ただし、DB スナップショット全体をエクスポートすることはできます。
-
ラテン文字 (A-Z)
-
数字 (0-9)
-
ドル記号 ($)
-
下線 (_)
-
-
データベーステーブルの列名では、一部の文字と空白文字の使用はサポートされていません。列名に次の文字が含まれるテーブルは、エクスポート時にスキップされます。
, ; { } ( ) \n \t = (space)
-
名前にスラッシュ (/) が含まれるテーブルは、エクスポート時にスキップされます。
-
Aurora PostgreSQL の一時テーブルとログに記録されていないテーブルは、エクスポート中にスキップされます。
-
データに BLOB や CLOB などの大きいオブジェクト (500 MB に近いか、それ以上) が含まれている場合、エクスポートは失敗します。
-
テーブルに、2 GB に近いか、それ以上のサイズの大きな行が含まれている場合、そのテーブルはエクスポート時にスキップされます。
-
部分エクスポートの場合、
ExportOnly
リストの最大サイズは 200 KB です。 -
エクスポートタスクごとに一意の名前を使用することを強くお勧めします。一意のタスク名を使用しない場合、次のエラーメッセージが表示されることがあります。
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/
ファイルを名付ける方法には、次の 2 つの規則があります。
-
現在の規則:
batch_index
/part-partition_index
-random_uuid
.format-based_extension
バッチインデックスは、テーブルから読み込まれたデータのバッチを表すシーケンス番号です。テーブルを小さなチャンクに分割し、並列でエクスポートできない場合は、複数のバッチインデックスになります。テーブルが複数のテーブルにパーティション化されている場合にも同じことが起こります。メインテーブルのテーブルパーティションごとに 1 つずつ、複数のバッチインデックスがあります。
テーブルを小さなチャンクに分割し、並列で読み取ることができる場合は、バッチインデックス
1
フォルダのみになります。バッチインデックスフォルダ内には、テーブルのデータを含む 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 を持つ行がない場合、完了したパーティションの 1 つが空になり、それに対するファイルも作成されません。前の例では、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 の詳細については、Apache Parquet
Parquet は、すべてのデータを次のプリミティブ型の 1 つとして格納します。
-
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 Logical Type Definitions
MySQL データ型の Parquet へのマッピング
次の表は、データが変換されて 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 を超える 10 進精度をサポートしていません。10 進値は、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 |
PostgreSQL データ型の Parquet へのマッピング
次の表は、データが変換されて 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 WITH TIME ZONE | 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 |