Conversão de dados ao exportar para um bucket do Amazon S3 para RDS - Amazon Relational Database Service

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 na documentação do Parquet.

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