あるeコマース企業は、ウェブサイトのクリックストリームデータをAmazon Data Firehoseを使ってAmazon S3に保存しています。各イベントのJSONには「customer_region」(例:tokyo、osaka)と「event_date」(例:2024-05-01)フィールドが含まれています。データエンジニアリングチームは以下を実現したいと考えています。 ・S3上のデータをcustomer_regionとevent_dateでパーティション分割し、Amazon Athenaのクエリを高速化する ・Firehoseのバッファリング期間中に到着したデータを正しいS3パーティションパスに格納する ・追加のAWS Lambda関数による変換処理を使わないこと これを最も適切に実現するAmazon Data Firehoseの設定はどれですか?
Amazon Data Firehoseの動的パーティショニング機能を使用すると、受信データのJSONフィールドに基づいてS3のパーティションプレフィックスを動的に決定できます。インラインjqクエリでフィールドを抽出してパーティションキーを定義し、S3プレフィックスに「!{partitionKeyFromQuery:customer_region}/!{partitionKeyFromQuery:event_date}/」のようなパターンを設定します。Lambdaなしでリアルタイムに正しいパーティションへの書き込みが可能です。 選択肢Aの後段ETL再配置方式は固定プレフィックスへの書き込み後にパーティションを再配置するため、処理遅延が発生し二重コストになります。 選択肢BのKinesis Data Streams + Glue Streaming ETLの組み合わせは複雑な構成であり、Firehoseのみで実現できる要件に対して過剰なアーキテクチャです。 選択肢DのLambdaトランスフォーマーは「Lambdaによる変換処理を使わないこと」という要件に反します。