Considerações sobre exportações de snapshot de cluster de banco de dados
Limitações
A exportação de dados de snapshots de banco de dados para o Amazon S3 apresenta as seguintes limitações:
-
Você não pode executar várias tarefas de exportação para o mesmo snapshot de cluster de banco de dados simultaneamente. Isso se aplica a exportações totais e parciais.
-
Você pode ter até cinco tarefas de exportação de snapshot de banco de dados simultâneas em andamento por Conta da AWS.
-
Não é possível restaurar dados de snapshots exportados de clusters de banco de dados do Aurora Serverless v1 para o S3.
-
As exportações para o S3 não são compatíveis com prefixos do S3 contendo dois pontos (:).
-
Os seguintes caracteres no caminho do arquivo do S3 são convertidos em sublinhados (_) durante a exportação:
\ ` " (space)
-
Se um banco de dados, esquema ou tabela tiver caracteres em seu nome diferentes dos a seguir, a exportação parcial não será aceita. No entanto, você pode exportar o snapshot de banco de dados inteiro.
-
Letras latinas (A–Z)
-
Dígitos (0–9)
-
Símbolo do dólar ($)
-
Sublinhado (_)
-
-
Espaços ( ) e alguns caracteres não são compatíveis em nomes de colunas de tabelas de banco de dados. As tabelas com os seguintes caracteres em nomes de colunas são ignoradas durante a exportação:
, ; { } ( ) \n \t = (space)
-
As tabelas com barras (/) em seus nomes são ignoradas durante a exportação.
-
As tabelas temporárias e não registradas do Aurora PostgreSQL são ignoradas durante a exportação.
-
Se os dados contiverem um objeto grande, como um BLOB ou um CLOB, com tamanho próximo ou superior a 500 MB, ocorrerá uma falha na exportação.
-
Se uma tabela contiver uma linha grande próxima ou maior que 2 GB, a tabela será ignorada durante a exportação.
-
Em relação a exportações parciais, a lista
ExportOnly
tem um tamanho máximo de 200 KB. -
É altamente recomendável que você use um nome exclusivo para cada tarefa de exportação. Se você não usar um nome de tarefa exclusivo, poderá receber a seguinte mensagem de erro:
ExportTaskAlreadyExistsFault: An error occurred (ExportTaskAlreadyExists) when calling the StartExportTask operation: The export task with the ID
[ExportTaskAlreadyExistsFault: ocorreu um erro (ExportTaskAlreadyExists) ao chamar a operação StartExportTask: a tarefa de exportação com o ID xxxxx já existe].xxxxx
already exists -
Você pode excluir um snapshot enquanto exporta seus dados para o S3, mas ainda é cobrado pelo armazenamento desse snapshot até que a tarefa de exportação seja concluída.
-
Não é possível restaurar dados de snapshots exportados do S3 para um novo cluster de banco de dados.
Convenção de nomenclatura de arquivos
Os dados exportados para tabelas específicas são armazenados no formato
, onde o prefixo base é o seguinte:base_prefix
/files
export_identifier
/database_name
/schema_name
.table_name
/
Por exemplo:
export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/
Existem duas convenções de nomenclatura para arquivos.
-
Convenção atual:
batch_index
/part-partition_index
-random_uuid
.format-based_extension
O índice do lote é um número de sequência que representa um lote de dados lidos da tabela. Se não conseguirmos particionar a tabela em pequenos blocos para serem exportados paralelamente, haverá vários índices de lote. O mesmo acontecerá se a tabela for particionada em várias tabelas. Haverá vários índices de lote, um para cada partição da tabela principal.
Se conseguirmos particionar a tabela em pequenos blocos para serem lidos paralelamente, haverá apenas a pasta
1
de índices de lote.Na pasta de índices de lote, há um ou mais arquivos Parquet que contêm os dados da sua tabela. O prefixo do nome do arquivo Parquet é
part-
. Se a tabela estiver particionada, haverá vários arquivos que começam com o índice de partiçãopartition_index
00000
.Pode haver lacunas na sequência do índice de partição. Isso acontece porque cada partição é obtida de uma consulta por intervalos na tabela. Se não houver dados no intervalo dessa partição, esse número de sequência será ignorado.
Por exemplo, suponha que a coluna
id
seja a chave primária da tabela e os valores mínimo e máximo sejam100
e1000
. Quando tentamos exportar essa tabela com nove partições, a lemos com consultas paralelas, como as seguintes:SELECT * FROM table WHERE id <= 100 AND id < 200 SELECT * FROM table WHERE id <= 200 AND id < 300
Isso deve gerar nove arquivos, de
part-00000-
arandom_uuid
.gz.parquetpart-00008-
. No entanto, se não houver linhas com IDs entrerandom_uuid
.gz.parquet200
e350
, uma das partições concluídas estará vazia e nenhum arquivo será criado para ela. No exemplo anterior,part-00001-
não foi criado.random_uuid
.gz.parquet -
Convenção mais antiga:
part-
partition_index
-random_uuid
.format-based_extension
É igual à convenção atual, mas sem o prefixo
, por exemplo: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
A convenção de nomenclatura de arquivos está sujeita a alterações. Portanto, ao ler as tabelas de destino, recomendamos que você leia tudo dentro do prefixo base para a tabela.
Conversão de dados ao exportar para um bucket do Amazon S3
Ao exportar um snapshot de banco de dados para um bucket do Amazon S3, o Amazon Aurora converte os dados para o formato Parquet e exporta e armazena os dados nesse formato. Para ter mais informações sobre o Parquet, consulte o site Apache Parquet
O Parquet armazena todos os dados como um dos seguintes tipos primitivos:
-
BOOLEAN
-
INT32
-
INT64
-
INT96
-
FLOAT
-
DOUBLE
-
BYTE_ARRAY: uma matriz de bytes de comprimento variável, também conhecida como binário
-
FIXED_LEN_BYTE_ARRAY: uma matriz de bytes de comprimento fixo usada quando os valores têm um tamanho constante
Os tipos de dados Parquet são poucos para reduzir a complexidade de leitura e gravação do formato. O Parquet fornece tipos lógicos para estender os tipos primitivos. Um tipo lógico é implementado como uma anotação com os dados em um campo de metadados LogicalType
. A anotação de tipo lógico explica como interpretar o tipo primitivo.
Quando o tipo lógico STRING
anota um tipo BYTE_ARRAY
, ele indica que a matriz de bytes deve ser interpretada como uma string de caracteres codificada em UTF-8. Depois que uma tarefa de exportação é concluída, o Amazon Aurora notificará você se uma conversão de string tiver ocorrido. Os dados subjacentes exportados são sempre os mesmos que os dados da origem. No entanto, devido à diferença de codificação em UTF-8, alguns caracteres podem aparecer diferentes da fonte quando lidos em ferramentas como a Athena.
Para ter mais informações, consulte Definições de tipos lógicos do Parquet
Tópicos
Mapeamento de tipos de dados MySQL para o Parquet
A tabela a seguir mostra o mapeamento dos tipos de dados MySQL para tipos de dados Parquet quando os dados são convertidos e exportados para o Amazon S3.
Tipo de dados de origem | Tipo primitivo do Parquet | Anotação de tipo lógico | Notas de conversão |
---|---|---|---|
Tipos de dados numéricos | |||
BIGINT | INT64 | ||
BIGINT UNSIGNED | FIXED_LEN_BYTE_ARRAY(9) | DECIMAL(20,0) | O Parquet é compatível apenas com tipos assinados, portanto, o mapeamento requer um byte adicional (8 mais 1) para armazenar o tipo BIGINT_UNSIGNED. |
BIT | BYTE_ARRAY | ||
DECIMAL | INT32 | DECIMAL (p,s) | Se o valor de origem for menor que 231, ele será armazenado como INT32. |
INT64 | DECIMAL (p,s) | Se o valor de origem for 231 ou maior, mas inferior a 263, ele será armazenado como INT64. | |
FIXED_LEN_BYTE_ARRAY(N) | DECIMAL (p,s) | Se o valor de origem for 263 ou superior, ele será armazenado como FIXED_LEN_BYTE_ARRAY(N). | |
BYTE_ARRAY | STRING | O Parquet não é compatível com precisão decimal maior que 38. O valor decimal é convertido em uma string em um tipo BYTE_ARRAY e codificado como UTF8. | |
DOUBLE | DOUBLE | ||
FLOAT | DOUBLE | ||
INT | INT32 | ||
INT UNSIGNED | INT64 | ||
MEDIUMINT | INT32 | ||
MEDIUMINT UNSIGNED | INT64 | ||
NUMERIC | INT32 | DECIMAL (p,s) |
Se o valor de origem for menor que 231, ele será armazenado como INT32. |
INT64 | DECIMAL (p,s) | Se o valor de origem for 231 ou maior, mas inferior a 263, ele será armazenado como INT64. | |
FIXED_LEN_ARRAY(N) | DECIMAL (p,s) | Se o valor de origem for 263 ou superior, ele será armazenado como FIXED_LEN_BYTE_ARRAY(N). | |
BYTE_ARRAY | STRING | O Parquet não é compatível com precisão numérica maior que 38. Esse valor numérico é convertido em uma string em um tipo BYTE_ARRAY e codificado como UTF8. | |
SMALLINT | INT32 | ||
SMALLINT UNSIGNED | INT32 | ||
TINYINT | INT32 | ||
TINYINT UNSIGNED | INT32 | ||
Tipos de dados de string | |||
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 dados de data e hora | |||
DATE | BYTE_ARRAY | STRING | Uma data é convertida em uma string em um tipo BYTE_ARRAY e codificada como UTF8. |
DATETIME | INT64 | TIMESTAMP_MICROS | |
TIME | BYTE_ARRAY | STRING | Um tipo TIME é convertido em uma string em um BYTE_ARRAY e codificado como UTF8. |
TIMESTAMP | INT64 | TIMESTAMP_MICROS | |
YEAR | INT32 | ||
Tipos de dados geométricos | |||
GEOMETRY | BYTE_ARRAY | ||
GEOMETRYCOLLECTION | BYTE_ARRAY | ||
MULTIPOINT | BYTE_ARRAY | ||
MULTIPOLYGON | BYTE_ARRAY | ||
POINT | BYTE_ARRAY | ||
POLYGON | BYTE_ARRAY | ||
Tipo de dados do JSON | |||
JSON | BYTE_ARRAY | STRING |
Mapeamento de tipo de dados PostgreSQL para Parquet
A tabela a seguir mostra o mapeamento de tipos de dados PostgreSQL para tipos de dados Parquet quando os dados são convertidos e exportados para o Amazon S3.
Tipo de dados do PostgreSQL | Tipo primitivo do Parquet | Anotação de tipo lógico | Notas de mapeamento |
---|---|---|---|
Tipos de dados numéricos | |||
BIGINT | INT64 | ||
BIGSERIAL | INT64 | ||
DECIMAL | BYTE_ARRAY | STRING | Um tipo DECIMAL é convertido em uma string em um tipo BYTE_ARRAY e codificado como UTF8. Essa conversão é para evitar complicações devido à precisão dos dados e valores de dados que não são um número (NaN). |
DOUBLE PRECISION | DOUBLE | ||
INTEGER | INT32 | ||
MONEY | BYTE_ARRAY | STRING | |
REAL | FLOAT | ||
SERIAL | INT32 | ||
SMALLINT | INT32 | INT_16 | |
SMALLSERIAL | INT32 | INT_16 | |
String e tipos de dados relacionados | |||
ARRAY | BYTE_ARRAY | STRING |
Uma matriz é convertida em uma string e codificada como BINARY (UTF8). Essa conversão é para evitar complicações devido à precisão dos dados, os valores dos dados que não são um número (NaN) e os valores de dados de tempo. |
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 dados de data e hora | |||
DATE | 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 dados 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 dados JSON | |||
JSON | BYTE_ARRAY | STRING | |
JSONB | BYTE_ARRAY | STRING | |
Outros tipos de dados | |||
BOOLEAN | BOOLEAN | ||
CIDR | BYTE_ARRAY | STRING | Tipo de dados de rede |
COMPOSITE | BYTE_ARRAY | STRING | |
DOMAIN | BYTE_ARRAY | STRING | |
INET | BYTE_ARRAY | STRING | Tipo de dados de rede |
MACADDR | BYTE_ARRAY | STRING | |
OBJECT IDENTIFIER | N/D | ||
PG_LSN | BYTE_ARRAY | STRING | |
RANGE | BYTE_ARRAY | STRING | |
UUID | BYTE_ARRAY | STRING |