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