本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資料庫叢集快照匯出的考量事項
限制
將資料庫快照資料匯出至 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
欄是資料表的主索引鍵,且其最小值和最大值為100
和1000
。當我們嘗試使用九個分割區匯出此資料表時,我們會使用平行查詢讀取它,如下所示: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-
。不過,如果沒有 IDs介於random_uuid
.gz.parquet200
和 之間的資料列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 |