Amazon RDS の Amazon S3 バケットにエクスポートする際のデータ変換 - Amazon Relational Database Service

Amazon RDS の Amazon S3 バケットにエクスポートする際のデータ変換

DB スナップショットを Amazon S3 バケットにエクスポートすると、Amazon RDS はデータを Parquet 形式に変換してエクスポートし、保存します。Parquet の詳細については、Apache Parquet のウェブサイトを参照してください。

Parquet は、すべてのデータを次のプリミティブ型の 1 つとして格納します。

  • BOOLEAN

  • INT32

  • INT64

  • INT96

  • FLOAT

  • DOUBLE

  • BYTE_ARRAY - バイナリとも呼ばれる可変長のバイト配列

  • FIXED_LEN_BYTE_ARRAY - 値が一定のサイズを持つ場合に使用される固定長のバイト配列

Parquet のデータ型はほとんど存在せず、この形式の読み書きに伴う複雑さが軽減されるようになっています。Parquet は、プリミティブ型を拡張するための論理的な型を提供します。論理的な型は、LogicalType メタデータフィールドにデータを持つ注釈として実装されます。論理的な型の注釈は、プリミティブ型の解釈方法を示します。

STRING 論理的な型が BYTE_ARRAY 型に注釈を付けた場合は、このバイト配列を UTF-8 でエンコードされた文字列として解釈する必要があることを示します。エクスポートタスクが完了すると、Amazon RDS は文字列変換が発生したかどうかを通知します。エクスポートされた基になるデータは、常に送信元データと同じです。ただし、UTF-8 のエンコーディングに伴う差異により、Athena などのツールで読み取ると、一部の文字はソースと異なるように表示される場合があります。

詳細については、Parquet ドキュメントの「Parquet Logical Type Definitions」を参照してください。

MySQL およびMariaDB データ型の Parquet へのマッピング

次の表は、データが変換されて Amazon S3 にエクスポートされる際の MySQL および MariaDB データ型から Parquet データ型へのマッピングを示しています。

出典データ型 Parquet プリミティブ型 論理的な型の注釈 変換に関するメモ
数値データ型
BIGINT INT64
BIGINT UNSIGNED FIXED_LEN_BYTE_ARRAY(9) DECIMAL(20,0) Parquet は符号付き型のみをサポートしているため、マッピングは BIGINT_UNSIGNED 型を格納するために追加のバイト (8 プラス 1) を必要とします。
BIT BYTE_ARRAY
DECIMAL INT32 DECIMAL(p,s) 出典値が 231 未満の場合は、INT32 として格納されます。
INT64 DECIMAL(p,s) 出典値が 231 以上で 263 未満の場合は、INT64 として格納されます。
FIXED_LEN_BYTE_ARRAY(N) DECIMAL(p,s) 出典値が 263 以上の場合は、FIXED_LEN_BYTE_ARRAY(N) として格納されます。
BYTE_ARRAY STRING Parquet は、38 を超える 10 進精度をサポートしていません。10 進値は、BYTE_ARRAY 型の文字列に変換され、UTF8 としてエンコードされます。
DOUBLE DOUBLE
FLOAT DOUBLE
INT INT32
INT UNSIGNED INT64
MEDIUMINT INT32
MEDIUMINT UNSIGNED INT64
NUMERIC INT32 DECIMAL(p,s)

出典値が 231 未満の場合は、INT32 として格納されます。

INT64 DECIMAL(p,s) 出典値が 231 以上で 263 未満の場合は、INT64 として格納されます。
FIXED_LEN_ARRAY(N) DECIMAL(p,s) 出典値が 263 以上の場合は、FIXED_LEN_BYTE_ARRAY(N) として格納されます。
BYTE_ARRAY STRING Parquet は、38 を超える数値精度をサポートしていません。この数値は、BYTE_ARRAY 型の文字列に変換され、UTF8 としてエンコードされます。
SMALLINT INT32
SMALLINT UNSIGNED INT32
TINYINT INT32
TINYINT UNSIGNED INT32
文字列データ型
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
日付と時刻のデータ型
DATE BYTE_ARRAY STRING 日付は BYTE_ARRAY 型の文字列に変換され、UTF8 としてエンコードされます。
DATETIME INT64 TIMESTAMP_MICROS
TIME BYTE_ARRAY STRING TIME 型は BYTE_ARRAY の文字列に変換され、UTF8 としてエンコードされます。
TIMESTAMP INT64 TIMESTAMP_MICROS
YEAR INT32
ジオメトリデータ型
GEOMETRY BYTE_ARRAY
GEOMETRYCOLLECTION BYTE_ARRAY
MULTIPOINT BYTE_ARRAY
MULTIPOLYGON BYTE_ARRAY
POINT BYTE_ARRAY
POLYGON BYTE_ARRAY
JSON データ型
JSON BYTE_ARRAY STRING

PostgreSQL データ型の Parquet へのマッピング

次の表は、データが変換されて Amazon S3 にエクスポートされる際の PostgreSQL データ型から Parquet データ型へのマッピングを示しています。

PostgreSQL のデータ型 Parquet プリミティブ型 論理的な型の注釈 マッピングに関するメモ
数値データ型
BIGINT INT64
BIGSERIAL INT64
DECIMAL BYTE_ARRAY STRING DECIMAL 型は BYTE_ARRAY 型の文字列に変換され、UTF8 としてエンコードされます。

この変換は、データ精度や、数値ではないデータ値 (NaN) に伴う複雑さを回避するためのものです。

DOUBLE PRECISION DOUBLE
INTEGER INT32
MONEY BYTE_ARRAY STRING
REAL FLOAT
SERIAL INT32
SMALLINT INT32 INT_16
SMALLSERIAL INT32 INT_16
文字列および関連データ型
ARRAY BYTE_ARRAY STRING

配列は文字列に変換され、BINARY (UTF8) としてエンコードされます。

この変換は、データ精度、数値ではないデータ値 (NaN)、および時間データ値に伴う複雑さを回避するためのものです。

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
日付と時刻のデータ型
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
ジオメトリデータ型
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
JSON データ型
JSON BYTE_ARRAY STRING
JSONB BYTE_ARRAY STRING
その他のデータ型
BOOLEAN BOOLEAN
CIDR BYTE_ARRAY STRING ネットワークデータ型
COMPOSITE BYTE_ARRAY STRING
DOMAIN BYTE_ARRAY STRING
INET BYTE_ARRAY STRING ネットワークデータ型
MACADDR BYTE_ARRAY STRING
OBJECT IDENTIFIER 該当なし
PG_LSN BYTE_ARRAY STRING
RANGE BYTE_ARRAY STRING
UUID BYTE_ARRAY STRING