Conversão de dados ao exportar para um bucket do Amazon S3 para RDS
Quando você exporta um snapshot de banco de dados para um bucket do Amazon S3, o Amazon RDS 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 RDS notifica você no caso de ocorrência de uma conversão de string. 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 e MariaDB para o Parquet
A tabela a seguir mostra o mapeamento dos tipos de dados MySQL e MariaDB 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 | INT(16, true) | |
| 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, true) | |
| SMALLSERIAL | INT32 | INT(16, true) | |
| 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 | |