Comentarios sobre la exportación de instantáneas de clústeres de base de datos
Limitaciones
Exportar datos de instantáneas de base de datos a Amazon S3 tiene las siguientes limitaciones:
-
No puede ejecutar varias tareas de exportación para la misma instantánea del clúster de base de datos simultáneamente. Esto es cierto para las exportaciones completas y parciales.
-
Puede tener hasta cinco tareas de exportación de instantáneas de base de datos en curso por Cuenta de AWS.
-
No puede exportar los datos de instantáneos desde clústeres de bases de datos de Aurora Serverless v1 a S3.
-
Las exportaciones a S3 no admiten prefijos S3 que contengan dos puntos (:).
-
Los siguientes caracteres en la ruta del archivo S3 se convierten en guiones bajos (_) durante la exportación:
\ ` " (space)
-
Si una base de datos, esquema o tabla tiene caracteres en su nombre distintos del siguiente, no se admite la exportación parcial. Sin embargo, puede exportar toda la instantánea de base de datos.
-
Letras latinas (A–Z)
-
Dígitos (0–9)
-
Símbolo de dólar ($)
-
Guion bajo (_)
-
-
No se admiten espacios ( ) ni determinados caracteres en los nombres de columna de las tablas de bases de datos. Las tablas con los siguientes caracteres en los nombres de columna se omiten durante la exportación:
, ; { } ( ) \n \t = (space)
-
Las tablas con barras diagonales (/) en el nombre se omiten durante la exportación.
-
Las tablas temporales y no registradas de Aurora PostgreSQL se omiten durante la exportación.
-
Si los datos contienen un objeto grande, como un BLOB o CLOB, cercano o superior a 500 MB, se producirá un error en la exportación.
-
Si una tabla contiene una fila grande cercana o superior a 2 GB, la tabla se omite durante la exportación.
-
Para exportaciones parciales, la lista
ExportOnly
tiene un tamaño máximo de 200 KB. -
Es muy recomendable que utilice un nombre exclusivo para cada tarea de exportación. Si no utiliza un nombre de tarea exclusivo, es posible que aparezca el siguiente mensaje de error como el que sigue:
exportTaskAlreadyExistsFault: Se ha producido un error (exportTaskAlReadyExists) al llamar a la operación StartExportTask: la tarea de exportación con ID
xxxxx
ya existe. -
Puede eliminar una instantánea mientras exporta los datos a S3, pero se le seguirán cobrando los costos de almacenamiento de esa instantánea hasta que se complete la tarea de exportación.
-
No puede restaurar los datos de instantáneas exportados de S3 a un nuevo clúster de base de datos.
Convención de nomenclatura de archivos
Los datos exportados para tablas específicas se almacenan en el formato
, donde el prefijo base es el siguiente:base_prefix
/files
export_identifier
/database_name
/schema_name
.table_name
/
Por ejemplo:
export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/
Hay dos convenciones para la forma en que se denominan los archivos.
-
Convención actual:
batch_index
/part-partition_index
-random_uuid
.format-based_extension
El índice de lote es un número secuencial que representa un lote de datos leídos desde la tabla. Si no podemos dividir su tabla en pequeños fragmentos para exportarlos en paralelo, habrá varios índices de lote. Lo mismo ocurre si la tabla está dividida en varias tablas. Habrá varios índices de lote, uno para cada una de las particiones de la tabla principal.
Si podemos dividir su tabla en pequeños fragmentos para que se lean en paralelo, solo estará la carpeta de índices de lote
1
.Dentro de la carpeta de índices de lote, habrá uno o varios archivos Parquet que contienen los datos de la tabla. El prefijo del nombre de archivo Parquet es
part-
. Si la tabla está particionada, habrá varios archivos que comiencen por el índice de particiónpartition_index
00000
.Puede haber huecos en la secuencia del índice de partición. Esto sucede porque cada partición se obtiene de una consulta por rangos de la tabla. Si no hay datos en el rango de esa partición, se omite ese número secuencial.
Por ejemplo, supongamos que la columna
id
es la clave principal de la tabla y que sus valores mínimo y máximo son100
y1000
. Al intentar exportar esta tabla con nueve particiones, la leemos con consultas paralelas como las siguientes:SELECT * FROM table WHERE id <= 100 AND id < 200 SELECT * FROM table WHERE id <= 200 AND id < 300
Esto debería generar nueve archivos, del
part-00000-
alrandom_uuid
.gz.parquetpart-00008-
. Sin embargo, si no hay filas con ID entrerandom_uuid
.gz.parquet200
y350
, una de las particiones completadas estará vacía y no se creará ningún archivo para ella. En el ejemplo anterior, no se creapart-00001-
.random_uuid
.gz.parquet -
Convención anterior:
part-
partition_index
-random_uuid
.format-based_extension
Es igual a la convención actual, pero sin el prefijo
, por ejemplo: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
La convención de nomenclatura de archivos está sujeta a cambios. Por lo tanto, cuando lea tablas de destino, recomendamos que lea todo lo que hay dentro del prefijo base de la tabla.
Conversión de datos al exportar a un bucket de Amazon S3
Cuando exporta una instantánea de base de datos a un bucket de Amazon S3, Amazon Aurora 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 Aurora 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
Mapeo del tipo de datos MySQL con Parquet
En la siguiente tabla se muestra el mapeo de los tipos de datos MySQL 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 |