

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

# 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)」を参照してください。

# レコード形式の変換を有効にする
<a name="enable-record-format-conversion"></a>

レコード形式の変換を有効にすると、Amazon Data Firehose の宛先を Amazon OpenSearch Service、Amazon Redshift、または Splunk に設定することはできません。形式の変換を有効にすると、Amazon S3 が唯一 Firehose ストリームに使用できる宛先になります。次のセクションは、コンソールおよび Firehose API オペレーションからレコード形式変換を有効にする方法を示しています。を使用してレコード形式の変換を設定する方法の例については CloudFormation、[AWS「::DataFirehose::DeliveryStream](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#aws-resource-kinesisfirehose-deliverystream--examples)」を参照してください。

## コンソールからのレコード形式変換を有効にする
<a name="record-format-conversion-using-console"></a>

Firehose ストリームを作成または更新するときに、コンソールでデータ形式の変換を有効にできます。データ形式の変換を有効にすると、Amazon S3 が Firehose ストリームに設定できる唯一の宛先になります。また、形式変換を有効にすると Amazon S3 圧縮が無効化されます。ただし、変換プロセスの一部として Snappy 圧縮が自動的に実行されます。この場合に Amazon Data Firehose が使用する Snappy のフレーミング形式は Hadoop と互換性があります。つまり、Snappy 圧縮の結果を使用して、Athena でこのデータに対するクエリを実行できます。Hadoop が依存する Snappy のフレーミング形式については、「[BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java)」を参照してください。

**データ Firehose ストリームのデータ形式の変換を有効にするには**

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/firehose/](https://console.aws.amazon.com/firehose/) で Amazon Data Firehose コンソールを開きます。

1. 更新する Firehose ストリームを選択するか、「[チュートリアル: コンソールから Firehose ストリームを作成する](basic-create.md)」のステップに従って新しい Firehose ストリームを作成します。

1. [**Convert record format (レコード形式を変換)**] で、[**Record format conversion (レコード形式の変換)**] を [**Enabled (有効)**] に設定します。

1. 目的の出力形式を選択します。2 つのオプションの詳細については、[Apache Parquet](https://parquet.apache.org/) および [Apache ORC](https://orc.apache.org/) を参照してください。

1.  AWS Glue テーブルを選択して、ソースレコードのスキーマを指定します。リージョン、データベース、テーブル、テーブルバージョンを設定します。

## Firehose API からのレコード形式変換を管理する
<a name="record-format-conversion-using-api"></a>

Amazon Data Firehose で入力データの形式を JSON から Parquet または ORC に変換する場合、[ExtendedS3DestinationConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html) または [ExtendedS3DestinationUpdate](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationUpdate.html) で、オプションの [DataFormatConversionConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DataFormatConversionConfiguration.html) 要素を指定します。[DataFormatConversionConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DataFormatConversionConfiguration.html) を指定する場合は、次の制限が適用されます。
+ [BufferingHints](https://docs.aws.amazon.com/firehose/latest/APIReference/API_BufferingHints.html) では、レコード形式の変換を有効にすると、`SizeInMBs` を 64 未満の値に設定できません。また、形式の変換が有効でない場合、デフォルト値は 5 です。有効にすると、この値は 128 になります。
+ [ExtendedS3DestinationConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html) または [ExtendedS3DestinationUpdate](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationUpdate.html) の `CompressionFormat` を `UNCOMPRESSED` に設定する必要があります。`CompressionFormat` のデフォルト値は `UNCOMPRESSED` です。したがって、[ExtendedS3DestinationConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html) で指定しないままにすることもできます。その場合もデータは、デフォルトで Snappy 圧縮を使用して、シリアル化プロセスの一環として圧縮されます。この場合に Amazon Data Firehose が使用する Snappy のフレーミング形式は Hadoop と互換性があります。つまり、Snappy 圧縮の結果を使用して、Athena でこのデータに対するクエリを実行できます。Hadoop が依存する Snappy のフレーミング形式については、「[BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java)」を参照してください。シリアライザーを構成する場合は、他のタイプの圧縮を選択できます。

# データ形式変換のエラーの処理
<a name="record-format-conversion-error-handling"></a>

Amazon Data Firehose がレコードを解析またはデシリアライズできない場合 (例えば、データがスキーマと一致しない場合)、エラープレフィックスを付けて Amazon S3 に書き込みます。この書き込みが失敗した場合、Amazon Data Firehose はこの書き込みを永久に再試行し、追加で配信されないようにします。失敗したレコードごとに、Amazon Data Firehose は次のスキーマを持つ JSON ドキュメントを書き込みます。

```
{
  "attemptsMade": long,
  "arrivalTimestamp": long,
  "ErrorCode": string,
  "ErrorMessage": string,
  "attemptEndingTimestamp": long,
  "rawData": string,
  "sequenceNumber": string,
  "subSequenceNumber": long,
  "dataCatalogTable": {
    "catalogId": string,
    "databaseName": string,
    "tableName": string,
    "region": string,
    "versionId": string,
    "catalogArn": string
  }
}
```