数据库集群快照导出注意事项 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

数据库集群快照导出注意事项

限制

将数据库快照数据导出到 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_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.parquetpart-00008-random_uuid.gz.parquet。但是,如果没有 ID 介于 200350 之间的行,则其中一个已完成的分区为空,并且不会为其创建任何文件。在前面的示例中,未创建 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 逻辑类型定义

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
字符串数据类型
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
SMALLSERIAL INT32 INT_16
字符串和相关数据类型
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