Amazon Data Firehose で入力データ形式を変換する - Amazon Data Firehose

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

Amazon Data Firehose で入力データ形式を変換する

Amazon Data Firehose は、データを Amazon S3 に保存する前に、入力データ形式を JSON から Apache Parquet または Apache ORC に変換できます。Parquet と ORC は、容量を節約し、JSON のような行指向の形式に比べ、より高速なクエリを可能にするカラム型のデータ形式です。カンマ区切り値 (CSV) や構造化テキストなど、JSON 以外の入力形式を変換する場合は、まず AWS Lambda を使用して JSON に変換できます。詳細については、「Amazon Data Firehose でソースデータを変換する」を参照してください。

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 SerDe を使用します。このデシリアライザーを選択すると、使用するタイムスタンプ形式を指定できます。指定するには、Joda-Time DateTimeFormat 形式の文字列のパターン構文に従います。詳細については、「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」および「Parquet SerDe」を参照してください。