資料庫叢集快照匯出的考量事項 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

資料庫叢集快照匯出的考量事項

限制

將資料庫快照資料匯出至 Amazon S3 時有下列限制:

  • 您無法同時針對相同的資料庫叢集快照執行多個匯出任務。這同時適用於完整和部分匯出。

  • 每個 最多可以有五個同時進行的資料庫快照匯出任務 AWS 帳戶。

  • 您無法將快照資料從Aurora Serverless v1資料庫叢集匯出至 S3。

  • 匯出至 S3 不支援包含冒號 (:) 的 S3 字首。

  • 在匯出過程中,S3 檔案路徑中的以下字元將轉換為底線 (_):

    \ ` " (space)
  • 如果資料庫、結構描述或資料表的名稱中包含下列字元以外的字元,則不支援部分匯出。但是,您可以匯出整個資料庫快照。

    • 拉丁字母 (A–Z)

    • 數字 (0–9)

    • 美元符號 ($)

    • 底線 (_)

  • 資料庫資料表資料欄名稱不支援空格 ( ) 和某些字元。資料行名稱中具備下列字元的資料表會在匯出時跳過:

    , ; { } ( ) \n \t = (space)
  • 匯出時會略過名稱中具備斜線 (/) 的表格。

  • 匯出期間,系統會略過 Aurora PostgreSQL 的暫存和未記錄資料表。

  • 若資料包含接近或超過 500 MB 的大型物件 (例如 BLOB 或 CLOB),則匯出會失敗。

  • 如果資料表包含接近或大於 2 GB 的大型資料列,則在匯出期間會略過該資料表。

  • 對於部分匯出,ExportOnly清單的大小上限為 200 KB。

  • 強烈建議您對每個匯出任務使用唯一的名稱。如果不使用唯一的任務名稱,可能會收到下列錯誤訊息:

    ExportTaskAlreadyExistsFault:呼叫 StartExportTask 操作時出現錯誤 (ExportTaskAlreadyExists):ID xxxxx 的匯出任務已存在。

  • 您在將快照資料匯出至 S3 時可以刪除該快照,但在匯出任務完成之前,仍會向您收取該快照的儲存費用。

  • 您無法將匯出的快照資料從 S3 還原到新的資料庫叢集。

檔案命名慣例

特定表格的匯出資料會以 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。當我們嘗試使用九個分割區匯出此資料表時,我們會使用平行查詢讀取它,如下所示:

    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。不過,如果沒有 IDs介於 200和 之間的資料列350,則其中一個已完成的分割區是空的,而且不會為其建立檔案。在上一個範例中, 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 儲存貯體時的資料轉換

當您將資料庫快照匯出至 Amazon S3 儲存貯體時,Amazon Aurora 會以 Parquet 格式轉換資料、匯出資料,以及存放資料。如需 Parquet 的詳細資訊,請參閱 Apache Parquet 網站。

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 Logical Type Definitions

MySQL 資料類型映射至 Parquet

下表顯示轉換資料並匯出至 Amazon S3 時,從 MySQL 資料類型到 Parquet 資料類型的映射。

來源資料類型 Parquet 基本類型 邏輯類型標註 轉換備註
數值資料類型
BIGINT INT64
BIGINT UNSIGNED FIXED_LEN_BYTE_ARRAY(9) DECIMAL(20,0) Parquet 只支援帶正負號的類型,因此映射需要額外的位元組 (8 加 1) 來存放 BIGINT_UNSIGNED 類型。
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 的 Decimal 精確度。Decimal 值會轉換成 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 的 Numeric 精確度。這個 Numeric 值會轉換成 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 N/A
PG_LSN BYTE_ARRAY STRING
RANGE BYTE_ARRAY STRING
UUID BYTE_ARRAY STRING