Amazon RDS 导出到 Amazon S3 存储桶时的数据转换 - Amazon Relational Database Service

Amazon RDS 导出到 Amazon S3 存储桶时的数据转换

将数据库快照导出到 Amazon S3 存储桶时,Amazon RDS 以 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 RDS 会通知您。导出的基础数据始终与源中的数据相同。但是,由于 UTF-8 中的编码差异,在工具(如 Athena)中读取时,某些字符可能会显示与源不同。

有关更多信息,请参阅 Parquet 文档中的 Parquet 逻辑类型定义

MySQL 和 MariaDB 数据类型到 Parquet 的映射

下表显示在将数据转换并导出到 Amazon S3 时从 MySQL 和 MariaDB 数据类型到 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