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 | 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 | |