数据库集群快照导出注意事项
限制
将数据库快照数据导出到 Amazon S3 有以下限制:
-
您不能为同一个数据库集群快照同时运行多个导出任务。这同时适用于完全导出和部分导出。
-
每个 Amazon Web Services 账户 最多可以执行五个并发数据库快照导出任务。
-
您不能将快照数据从 Aurora Serverless v1 数据库集群导出到 S3。
-
导出到 S3 不支持包含冒号(:)的 S3 前缀。
-
在导出过程中,S3 文件路径中的以下字符将转换为下划线 (_):
\ ` " (space) -
如果数据库、架构或表的名称中包含以下字符以外的字符,则不支持部分导出。但是,您可以导出整个数据库快照。
-
拉丁字母 (A–Z)
-
数字 (0–9)
-
美元符号 ($)
-
下划线 (_)
-
-
数据库表列名不支持空格 ( ) 和某些字符。在导出过程中会跳过列名中包含以下字符的表:
, ; { } ( ) \n \t = (space) -
在导出过程中会跳过其名称中包含斜杠 (/) 的表。
-
在导出期间,将跳过 Aurora PostgreSQL 临时表和未记录的表。
-
如果数据包含接近或大于 500MB 的大型对象(例如 BLOB 或 CLOB),则导出失败。
-
如果表中某个大行的大小接近或大于 2GB,则会在导出过程中略过该表。
-
对于部分导出,
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_index00000开头的文件。分区索引序列中可能存在间隙。之所以发生这种情况,是因为每个分区都是从表中的范围查询中获得的。如果该分区的范围内没有数据,则跳过该序列号。
例如,假设
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-。但是,如果没有 ID 介于random_uuid.gz.parquet200和350之间的行,则其中一个已完成的分区为空,并且不会为其创建任何文件。在前面的示例中,未创建part-00001-。random_uuid.gz.parquet -
较早的约定:
part-partition_index-random_uuid.format-based_extension这与当前约定相同,但没有
前缀,例如:batch_indexpart-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 逻辑类型定义
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 的小数精度。十进制值转换为 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 | |
| 文本搜索 | BYTE_ARRAY | STRING | |
| VARCHAR(N) | BYTE_ARRAY | STRING | |
| XML | BYTE_ARRAY | STRING | |
| 日期和时间数据类型 | |||
| DATE | BYTE_ARRAY | STRING | |
| INTERVAL | BYTE_ARRAY | STRING | |
| TIME | BYTE_ARRAY | STRING | |
| 带时区的时间 | 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 | |
| 路径 | 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 | |
| 对象标识符 | 不适用 | ||
| PG_LSN | BYTE_ARRAY | STRING | |
| RANGE | BYTE_ARRAY | STRING | |
| UUID | BYTE_ARRAY | STRING | |