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

Amazon S3 の Apache Iceberg テーブルへの Amazon Data Firehose ストリームの配信はプレビュー中であり、変更される可能性があります。

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

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

Amazon Data Firehose は、データを Amazon S3 に保存する前にJSON、入力データの形式を から Apache Parquet または Apache ORC に変換できます。 https://parquet.apache.org/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が含まれているJSON場合は、OpenX 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」を参照してください。

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

前述の形式以外の形式のタイムスタンプがある場合は、Apache Hive JSON SerDeを使用します。このデシリアライザーを選択すると、使用するタイムスタンプ形式を指定できます。指定するには、Joda-Time DateTimeFormat 形式の文字列のパターン構文に従います。詳細については、「クラス 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、JSONデータの構造をミラーリングする STRUCTタイプをスキーマで使用します。STRUCT タイプJSONでネストされた を処理する方法については、この例を参照してください。

重要

サイズ制限を指定しないデータ型の場合、1 行のすべてのデータMBsには 32 という実用的な制限があります。

CHAR または の長さを指定するとVARCHAR、Firehose は入力データを読み取るときに、指定された長さの文字列を切り捨てます。基になるデータ文字列が長い場合、変更されません。

Serializer

Firehose では、データをターゲット列指向ストレージ形式 (Parquet または ORC) に変換するためにシリアライザーが必要です。次の 2 種類のシリアライザーのいずれかを選択できます。

選択するシリアライザーは、ビジネスニーズに応じて異なります。2 つのシリアライザオプションの詳細については、ORC SerDe「」および「Parquet SerDe」を参照してください。