

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Data Firehose で入力データ形式を変換する
<a name="record-format-conversion"></a>

Amazon Data Firehose は、データを Amazon S3 に保存する前に、入力データ形式を JSON から [Apache Parquet](https://parquet.apache.org/) または [Apache ORC](https://orc.apache.org/) に変換できます。Parquet と ORC は列指向のデータ形式であり、容量を節約するだけでなく、JSON のような行指向の形式と比較してより高速なクエリを可能にします。カンマ区切り値 (CSV) や構造化テキストなど、JSON 以外の入力形式を変換する場合は、 AWS Lambda を使用して最初に JSON に変換できます。詳細については、「[Amazon Data Firehose でソースデータを変換する](data-transformation.md)」を参照してください。

Amazon Data Firehose に送信する前にレコードを集約しても、データの形式を変換できます。

Amazon Data Firehose でレコードデータの形式を変換するためには、次の 3 つの要素が必要です。

## Deserializer
<a name="record-format-conversion-deserializer"></a>

Amazon Data Firehose では、入力データの JSON を読み取るためにデシリアライザーが必要です。次の 2 種類のデシリアライザーのいずれかを選択できます。

複数の JSON ドキュメントを同じレコードに結合する場合は、サポートされている JSON 形式で入力が表示されていることを確認してください。JSON ドキュメントの配列は有効な入力ではありません。

例えば、`{"a": 1}{"b": 1}` は正しい入力で、`[{"a":1}, {"a":2}]` は誤った入力になります。
+ [Apache Hive JSON SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON)
+ [OpenX JSON SerDe](https://github.com/rcongiu/Hive-JSON-Serde)

### JSON デシリアライザーを選択する
<a name="record-format-conversion-deserializers"></a>

入力 JSON に次の形式のタイムスタンプが含まれている場合は、[OpenX JSON SerDe](https://github.com/rcongiu/Hive-JSON-Serde) を選択します。
+  yyyy-MM-dd'T'HH:mm:ss[.S]'Z'。小数は最大 9 桁まで使用できます – 例: `2017-02-07T15:13:01.39256Z`。
+  yyyy-[M]M-[d]d HH:mm:ss[.S]。小数は最大 9 桁まで使用できます – 例: `2017-02-07 15:13:01.14`。
+  エポック秒 – たとえば、`1518033528` です。
+  エポックミリ秒 – たとえば、`1518033528123` です。
+  浮動小数点エポック秒 – たとえば、`1518033528.123` です。

OpenX JSON SerDe はピリオド (`.`) をアンダースコア (`_`) に変換できます。デシリアライズする前に、JSON キーを小文字に変換することもできます。Amazon Data Firehose を介したこのデシリアライザーで利用可能になるオプションの詳細については、「[OpenXJsonSerDe](https://docs.aws.amazon.com/firehose/latest/APIReference/API_OpenXJsonSerDe.html)」を参照してください。

どのデシリアライザーを選択するかわからない場合は、サポートされていないタイムスタンプがない限り、OpenX JSON SerDe を使用します。

前述の形式以外のタイムスタンプがある場合は、[Apache Hive JSON SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON) を使用します。このデシリアライザーを選択すると、使用するタイムスタンプ形式を指定できます。指定するには、Joda-Time `DateTimeFormat` 形式の文字列のパターン構文に従います。詳細については、「[Class DateTimeFormat](https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html)」を参照してください。

特殊な値 `millis` を使用して、エポックミリ秒でタイムスタンプを解析することもできます。形式を指定していない場合は、Amazon Data Firehose はデフォルトで `java.sql.Timestamp::valueOf` を使用します。

Hive JSON SerDe は以下を許可しません。
+ 列名のピリオド (`.`)。
+ タイプが `uniontype` のフィールド。
+ スキーマに数値型を持つフィールドですが、JSON 形式の文字列です。たとえば、スキーマが (int) で JSON が `{"a":"123"}` の場合、Hive SerDe ではエラーが発生します。

Hive SerDe はネストされた JSON を文字列に変換しません。たとえば、`{"a":{"inner":1}}` がある場合、`{"inner":1}` は文字列として扱われません。

## Schema
<a name="record-format-conversion-schema"></a>

Amazon Data Firehose では、そのデータを解釈する方法を決定するスキーマが必要です。[AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) を使用して、 AWS Glue Data Catalogでスキーマを作成します。Amazon Data Firehose はそのスキーマを参照し、使用して入力データを解釈します。同じスキーマを使用して、Amazon Data Firehose ソフトウェアと分析ソフトウェアの両方を設定できます。詳細については、「 *AWS Glue デベロッパーガイド*[AWS 」の「 Glue データカタログの入力](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html)」を参照してください。

**注記**  
 AWS Glue Data Catalog で作成されたスキーマは、入力データ構造と一致する必要があります。一致していないと、変換されたデータに、スキーマで指定されていない属性が含まれなくなります。ネストされた JSON を使用する場合は、STRUCT タイプを JSON データの構造を反映したスキーマで使用します。STRUCT タイプを使ってネストされた JSON を処理する方法については、[こちらの例](https://docs.aws.amazon.com/athena/latest/ug/openx-json-serde.html#nested-json-serde-example)を参照してください。

**重要**  
サイズ制限を指定しないデータ型については、単一の行内にあるすべてのデータのために 32 MB という実用的制限が設定されています。  
`CHAR` または `VARCHAR` の長さを指定すると、Firehose は入力データを読み取る際に、指定された長さで文字列を切り詰めます。基盤となるデータ文字列の方が長い場合は、変更されません。

## Serializer
<a name="record-format-conversion-serializer"></a>

**Firehose では、データをターゲットの列指向ストレージ形式 (Parquet または ORC) に変換するためのシリアライザーが必要です** – 次の 2 種類のシリアライザーのいずれかを選択できます。
+ [ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)
+ [Parquet SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)

### シリアライザーを選択する
<a name="record-format-conversion-serializers"></a>

選択するシリアライザーは、ビジネスニーズに応じて異なります。シリアライザーの 2 つのオプションの詳細については、「[ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)」および「[Parquet SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)」を参照してください。