Conversión de datos al exportar a un bucket de Amazon S3 para Amazon RDS - Amazon Relational Database Service

Conversión de datos al exportar a un bucket de Amazon S3 para Amazon RDS

Cuando exporta una instantánea de base de datos a un bucket de Amazon S3, Amazon RDS convierte los datos al formato Parquet, y exporta y almacena los datos en dicho formato. Para obtener más información sobre Parquet, consulte el sitio web de Apache Parquet.

Parquet almacena todos los datos como uno de los siguientes tipos primitivos:

  • BOOLEANO

  • INT32

  • INT64

  • INT96

  • FLOAT

  • DOUBLE

  • BYTE_ARRAY: matriz de bytes de longitud variable, también conocida como binario.

  • FIXED_LEN_BYTE_ARRAY. matriz de bytes de longitud fija utilizada cuando los valores tienen un tamaño constante.

Los tipos de datos Parquet son pocos para reducir la complejidad de leer y escribir el formato. Parquet proporciona tipos lógicos para ampliar los tipos primitivos. Un tipo lógico se implementa como una anotación con los datos en un campo de metadatos LogicalType. La anotación de tipo lógico explica cómo interpretar el tipo primitivo.

Cuando el tipo lógico STRING anota un tipo BYTE_ARRAY, indica que la matriz de bytes debe interpretarse como una cadena de caracteres codificada UTF-8. Cuando se complete la tarea de exportación, Amazon RDS le notificará si se ha producido alguna conversión de cadena. Los datos subyacentes exportados siempre son los mismos que los datos del origen. Sin embargo, debido a la diferencia de codificación en UTF-8, algunos caracteres pueden parecer diferentes a los del origen cuando se leen en herramientas como Athena.

Para obtener más información, consulte Definiciones de tipos lógicos de Parquet en la documentación de Parquet.

Mapeo del tipo de datos MySQL y MariaDB con Parquet

En la siguiente tabla se muestra el mapeo de los tipos de datos MySQL y MariaDB con los tipos de datos Parquet cuando los datos se convierten y se exportan a Amazon S3.

Tipo de datos de origen Tipo primitivo de Parquet Anotación de tipo lógico Notas de conversión
Tipos de datos numéricos
BIGINT INT64
BIGINT UNSIGNED FIXED_LEN_BYTE_ARRAY(9) DECIMAL(20,0) Parquet solo admite tipos firmados, por lo que el mapeo requiere un byte adicional (8 más 1) para almacenar el tipo BIGINT_UNSIGNED.
BIT BYTE_ARRAY
DECIMAL INT32 DECIMAL (p,s) Si el valor de origen es inferior a 231, se almacena como INT32.
INT64 DECIMAL (p,s) Si el valor de origen es 231 o superior, pero inferior a 263, se almacena como INT64.
FIXED_LEN_BYTE_ARRAY(N) DECIMAL (p,s) Si el valor de origen es 263 o superior, se almacena como FIXED_LEN_BYTE_ARRAY(N).
BYTE_ARRAY STRING Parquet no admite una precisión decimal superior a 38. El valor decimal se convierte en una cadena en un tipo BYTE_ARRAY y se codifica como UTF8.
DOUBLE DOUBLE
FLOAT DOUBLE
INT INT32
INT UNSIGNED INT64
MEDIUMINT INT32
MEDIUMINT UNSIGNED INT64
NUMERIC INT32 DECIMAL (p,s)

Si el valor de origen es inferior a 231, se almacena como INT32.

INT64 DECIMAL (p,s) Si el valor de origen es 231 o superior, pero inferior a 263, se almacena como INT64.
FIXED_LEN_ARRAY(N) DECIMAL (p,s) Si el valor de origen es 263 o superior, se almacena como FIXED_LEN_BYTE_ARRAY(N).
BYTE_ARRAY STRING Parquet no admite una precisión numérica superior a 38. Este valor numérico se convierte en una cadena en un tipo BYTE_ARRAY y se codifica como UTF8.
SMALLINT INT32
SMALLINT UNSIGNED INT32
TINYINT INT32
TINYINT UNSIGNED INT32
Tipos de datos de cadena
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
Tipos de datos de fecha y hora
FECHA BYTE_ARRAY STRING Una fecha se convierte en una cadena en un tipo BYTE_ARRAY y se codifica como UTF8.
DATETIME INT64 TIMESTAMP_MICROS
TIME BYTE_ARRAY STRING Un tipo TIME se convierte en una cadena en un BYTE_ARRAY y se codifica como UTF8.
TIMESTAMP INT64 TIMESTAMP_MICROS
YEAR INT32
Tipos de datos geométricos
GEOMETRY BYTE_ARRAY
GEOMETRYCOLLECTION BYTE_ARRAY
MULTIPOINT BYTE_ARRAY
MULTIPOLYGON BYTE_ARRAY
POINT BYTE_ARRAY
POLYGON BYTE_ARRAY
Tipos de datos de JSON
JSON BYTE_ARRAY STRING

Mapeo de tipos de datos PostgreSQL con Parquet

En la tabla siguiente se muestra el mapeo de los tipos de datos PostgreSQL con los tipos de datos Parquet cuando los datos se convierten y se exportan a Amazon S3.

Tipos de datos de PostgreSQL Tipo primitivo de Parquet Anotación de tipo lógico Notas de mapeo
Tipos de datos numéricos
BIGINT INT64
BIGSERIAL INT64
DECIMAL BYTE_ARRAY STRING Un tipo DECIMAL se convierte en una cadena en un tipo BYTE_ARRAY y se codifica como UTF8.

Esta conversión se realiza para evitar complicaciones debidas a la precisión de los datos y los valores de datos que no son un número (NaN).

DOUBLE PRECISION DOUBLE
INTEGER INT32
MONEY BYTE_ARRAY STRING
REAL FLOAT
SERIAL INT32
SMALLINT INT32 INT_16
SMALLSERIAL INT32 INT_16
Tipos de datos de cadena y relacionados
ARRAY BYTE_ARRAY STRING

Una matriz se convierte en una cadena y se codifica como BINARY (UTF8).

Esta conversión se realiza para evitar complicaciones debido a la precisión de los datos, valores de datos que no son un número (NaN) y valores de datos de tiempo.

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
Tipos de datos de fecha y hora
FECHA 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
Tipos de datos geométricos
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
Tipos de datos JSON
JSON BYTE_ARRAY STRING
JSONB BYTE_ARRAY STRING
Otros tipos de datos
BOOLEANO BOOLEANO
CIDR BYTE_ARRAY STRING Tipo de datos de red
COMPOSITE BYTE_ARRAY STRING
DOMAIN BYTE_ARRAY STRING
INET BYTE_ARRAY STRING Tipo de datos de red
MACADDR BYTE_ARRAY STRING
OBJECT IDENTIFIER N/A
PG_LSN BYTE_ARRAY STRING
RANGE BYTE_ARRAY STRING
UUID BYTE_ARRAY STRING