あるデータエンジニアリングチームは、毎日新しいCSVファイルが追加されるAmazon S3バケットを対象に、AWS Glue ETLジョブを毎夜実行してデータをAmazon Redshiftにロードしています。ジョブは毎回S3バケット内のすべてのファイルをスキャン・処理するため、処理時間とコストが増大しています。前回のジョブ実行以降に追加されたファイルのみを処理するよう改善したい。追加インフラの管理を最小限に抑えながら実現できる方法はどれですか?
AWS Glue のジョブブックマークは、前回実行で処理済みのS3オブジェクトを自動追跡し、次回実行時に新規追加分のみを処理する増分処理機能です。追加コードや外部サービスなしにネイティブで実現でき、ジョブ失敗時の再実行でも重複処理を防ぎます。 選択肢BのS3バケットにイベント通知を設定し、新しいファイルが追加されるたびにAWS Lambda経由でGlueジョブをトリガーする方法は、ファイル単位でジョブを起動するため、大量ファイルが届く場合に過剰なジョブ実行が発生しバッチ処理の設計と合いません。 選択肢CのGlueジョブのスクリプト内で前日のタイムスタンプをパラメータとして渡し、S3オブジェクトのLastModifiedでフィルタリングするコードを実装する方法は、実装が複雑で、ジョブ失敗時の再処理境界の管理が困難です。 選択肢Dの処理済みファイルのキーをAmazon DynamoDBテーブルに記録し、実行時にS3ファイル一覧と比較して未処理ファイルのみを選択する方法は、DynamoDBによる自前の状態管理は可能ですが、ジョブブックマークで解決できる問題に対して実装・運用コストが過大です。