Amazon Data Firehose を使用して Apache Iceberg テーブルにデータを配信する - Amazon Data Firehose

Amazon Data Firehose を使用して Apache Iceberg テーブルにデータを配信する

Apache Iceberg は、ビッグデータ分析を実行するための高性能オープンソーステーブル形式です。Apache Iceberg は、SQL テーブルの信頼性とシンプルさを Amazon S3 データレイクにもたらし、Spark、Flink、Trino、Hive、Impala などのオープンソース分析エンジンが同じデータを同時に操作することを可能にします。Apache Iceberg の詳細については、「https://iceberg.apache.org/」を参照してください。

Firehose を使用して、Amazon S3 の Apache Iceberg テーブルにストリーミングデータを直接配信できます。この機能を使用すると、単一のストリームから異なる Apache Iceberg テーブルにレコードをルーティングし、Apache Iceberg テーブルのレコードに対して、挿入、更新、削除オペレーションを自動的に適用できます。Firehose は、Iceberg テーブルへの正確に 1 回限りの配信を保証します。この機能を使用するには、AWS Glue Data Catalog を使用する必要があります。

注記

Firehose は、米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (アイルランド)、アジアパシフィック (東京)、カナダ (中部)、およびアジアパシフィック (シドニー) AWS リージョン で、宛先としての Apache Iceberg テーブルをサポートしています。

考慮事項と制限事項

Apache Iceberg テーブルに対する Firehose のサポートには、次の考慮事項と制限があります。

  • スループットDirect PUT をソースとして使用して Apache Iceberg テーブルにデータを配信する場合、ストリームあたりの最大スループットは、米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (アイルランド) リージョンでは 5 MiB/秒、アジアパシフィック (東京)、カナダ (中部)、アジアパシフィック (シドニー) リージョンでは 1 MiB/秒です。更新や削除なしで Iceberg テーブルにデータを挿入し、ストリームのスループットを増やしたい場合は、Firehose Limits フォームを使用して、スループット制限の引き上げをリクエストできます。

  • [列] – 列名と値については、Firehose はマルチレベルでネストされた JSON の最初のレベルのノードのみを取得します。例えば、Firehose は、位置フィールドを含む最初のレベルで使用可能なノードを選択します。ソースデータの列名およびデータ型は、Firehose が正常に配信するためのターゲットテーブルの列名およびデータ型と一致する必要があります。この場合、Firehose は、データ型列が位置フィールドと一致するように、Iceberg テーブルで構築またはマッピングされていることを想定します。Firehose は 16 レベルのネストをサポートしています。ネストされた JSON の例を次に示します。

    { "version":"2016-04-01", "deviceId":"<solution_unique_device_id>", "sensorId":"<device_sensor_id>", "timestamp":"2024-01-11T20:42:45.000Z", "value":"<actual_value>", "position":{ "x":143.595901, "y":476.399628, "z":0.24234876 } }

    列名またはデータ型が一致しない場合、Firehose はエラーをスローし、データを S3 エラーバケットに配信します。すべての列名とデータ型が Apache Iceberg テーブルで一致しても、ソースレコードに追加のフィールドが存在している場合、Firehose は新しいフィールドをスキップします。

  • レコードごとに 1 つの JSON オブジェクト – 1 つの Firehose レコードに 1 つの JSON オブジェクトのみを送信できます。レコード内で複数の JSON オブジェクトを集約して送信すると、Firehose はエラーをスローし、データを S3 エラーバケットに配信します。KPL でレコードを集約し、Amazon Kinesis Data Streams をソースとして Firehose にデータを取り込むと、Firehose はレコードごとに 1 つの JSON オブジェクトを自動的に集約解除して使用します。

  • 圧縮とストレージの最適化 – Firehose を使用して書き込むたびに、スナップショット、小さなデータファイル、削除ファイルをコミットして生成します。何千もの小さなデータファイルがある場合、メタデータのオーバーヘッドが増加し、読み取りパフォーマンスに影響します。最適なクエリパフォーマンスを実現するには、小さなデータファイルを定期的に取得し、より大きなデータファイルに書き換えるソリューションを検討することをお勧めします。このプロセスは圧縮と呼ばれます。AWS Glue Data Catalog は Apache Iceberg テーブルの自動圧縮をサポートします。詳細については、「AWS Glue ユーザーガイド」の「Compaction management」を参照してください。詳細については、「Automatic compaction of Apache Iceberg Tables」を参照してください。

    データファイルの圧縮に加えて、Apache Iceberg テーブルのテーブルメンテナンスを実行する VACUUM ステートメントを使用してストレージ消費を減らすことで、Iceberg テーブルを最適化することもできます。あるいは、AWS Glue Data Catalog を使用できます。これは、データファイルや孤立したファイルを自動的に削除し、不要になったスナップショットを失効させることによって、Apache Iceberg テーブルのマネージドテーブル最適化もサポートします。詳細については、Apache Iceberg テーブルのストレージ最適化に関するこのブログ記事を参照してください。