Firehose での入力レコードフォーマットの変換 - Amazon Data Firehose

Amazon Data Firehose は、以前は Amazon Kinesis Data Firehose と呼ばれていました。

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

Firehose での入力レコードフォーマットの変換

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

レコード形式の変換の要件

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

  • 入力データの JSON を読み取るデシリアライザー — Apache Hive JSON と OpenX JSON の 2 種類のデシリアライザーのいずれかを選択できます。 SerDe SerDe

    注記

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

    たとえば、これは正しい入力です: {"a":1}{"a":2}

    そして、これは間違った入力です。[{"a":1}, {"a":2}]

  • データの解釈方法を決定するスキーマ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 を処理する方法については、こちらの例を参照してください。

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

重要

レコード形式の変換を有効にすると、Amazon Data Firehose の送信先を Amazon OpenSearch サービス、Amazon Redshift、または Splunk に設定することはできません。フォーマット変換が有効になっていると、Firehose ストリームに使用できる送信先は Amazon S3 だけです。

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

JSON デシリアライザーの選択

入力 JSON SerDe に以下の形式のタイムスタンプが含まれている場合は、OpenX JSON を選択します。

  • 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 を通じてこのデシリアライザーで使用できるオプションの詳細については、「OpenX」を参照してください。JsonSerDe

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

上記以外の形式のタイムスタンプがある場合は、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} は文字列として扱われません。

シリアライザーの選択

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

入力レコードの形式の変換 (コンソール)

Firehose ストリームを作成または更新するときに、コンソールでデータ形式変換を有効にできます。データ形式の変換が有効になっている場合、Firehose ストリームに設定できる送信先は Amazon S3 だけです。また、形式変換を有効にすると Amazon S3 圧縮が無効化されます。ただし、変換プロセスの一部として Snappy 圧縮が自動的に実行されます。この場合 Amazon Data Firehose が使用している Snappy のフレーミング形式は Hadoop と互換性があります。つまり、Snappy 圧縮の結果を使用して、Athena でこのデータに対するクエリを実行できます。Hadoop が採用している Snappy フレーミング形式については、.java を参照してください。BlockCompressorStream

Firehose データストリームのデータ形式変換を有効にするには
  1. にサインインし AWS Management Console、https://console.aws.amazon.com/firehose/ にある Amazon Data Firehose コンソールを開きます。

  2. 更新する Firehose ストリームを選択するか、の手順に従って新しい Firehose ストリームを作成します。Firehose ストリームの作成

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

  4. 目的の出力形式を選択します。2 つのオプションの詳細については、Apache Parquet および Apache ORC を参照してください。

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

入力レコードの形式の変換 (API)

Amazon Data Firehose で入力データの形式を JSON から Parquet または ORC に変換させたい場合は、extendeDS3 または DestinationConfigurationextendeDS3 DataFormatConversionConfigurationでオプションの要素を指定してください。DestinationUpdate指定する場合、以下の制限が適用されます。DataFormatConversionConfiguration

レコード形式変換のエラー処理

Amazon Data Firehose はレコードを解析または逆シリアル化できない場合 (データがスキーマと一致しない場合など)、エラープレフィックスを付けて Amazon S3 に書き込みます。この書き込みが失敗した場合、Amazon Data Firehose は書き込みを永久に再試行し、それ以降の配信をブロックします。Amazon Data Firehose は、失敗したレコードごとに、次のスキーマを使用して JSON ドキュメントを書き込みます。

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

レコード形式の変換例

を使用してレコード形式変換を設定する方法の例については AWS CloudFormation、AWS::DataFirehose: DeliveryStream を参照してください。