翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Data Firehose で入力データ形式を変換する
Amazon Data Firehose は、データを Amazon S3 に保存する前に、入力データ形式を JSON から Apache Parquet
Amazon Data Firehose に送信する前にレコードを集約しても、データの形式を変換できます。
Amazon Data Firehose でレコードデータの形式を変換するためには、次の 3 つの要素が必要です。
Deserializer
Amazon Data Firehose では、入力データの JSON を読み取るためにデシリアライザーが必要です。次の 2 種類のデシリアライザーのいずれかを選択できます。
複数の JSON ドキュメントを同じレコードに結合する場合は、サポートされている JSON 形式で入力が表示されていることを確認してください。JSON ドキュメントの配列は有効な入力ではありません。
たとえば、これは正しい入力です: {"a":1}{"a":2}
そして、これは間違った入力です: [{"a":1}, {"a":2}]
入力 JSON に次の形式のタイムスタンプが含まれている場合は、OpenX 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」を参照してください。
どのデシリアライザーを選択するかわからない場合は、サポートされていないタイムスタンプがない限り、OpenX JSON SerDe を使用します。
前述の形式以外のタイムスタンプがある場合は、Apache Hive JSON SerDeDateTimeFormat
形式の文字列のパターン構文に従います。詳細については、「Class DateTimeFormat
特殊な値 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
Amazon Data Firehose では、そのデータを解釈する方法を決定するスキーマが必要です。AWS Glue を使用して、AWS Glue Data Catalog でスキーマを作成します。Amazon Data Firehose はそのスキーマを参照し、使用して入力データを解釈します。同じスキーマを使用して、Amazon Data Firehose ソフトウェアと分析ソフトウェアの両方を設定できます。詳細については、AWS Glue 開発者ガイドの「AWS Glue データカタログの作成」を参照してください。
注記
AWS Glue Data Catalog で作成されたスキーマは、入力データ構造と一致している必要があります。一致していないと、変換されたデータに、スキーマで指定されていない属性が含まれなくなります。ネストされた JSON を使用する場合は、STRUCT タイプを JSON データの構造を反映したスキーマで使用します。STRUCT タイプを使ってネストされた JSON を処理する方法については、こちらの例を参照してください。
重要
サイズ制限を指定しないデータ型については、単一の行内にあるすべてのデータのために 32 MB という実用的制限が設定されています。
CHAR
または VARCHAR
の長さを指定すると、Firehose は入力データを読み取る際に、指定された長さで文字列を切り詰めます。基盤となるデータ文字列の方が長い場合は、変更されません。
Serializer
Firehose では、データをターゲットの列指向ストレージ形式 (Parquet または ORC) に変換するためのシリアライザーが必要です – 次の 2 種類のシリアライザーのいずれかを選択できます。
選択するシリアライザーは、ビジネスニーズに応じて異なります。シリアライザーの 2 つのオプションの詳細については、「ORC SerDe