DEAデータの取り込みと変換
あるアナリティクスチームは、Amazon S3に毎日追加される大量のJSON形式のアプリログ(1日あたり数百GB)をAmazon Athenaで分析しています。スキャン量が多くクエリコストが高騰しているため、データを列指向のParquetに変換し日付でパーティション化したいと考えています。追加のETLクラスターを管理せず、Athena内で完結する最もコスト効率の高い方法はどれですか。
AAthenaのフェデレーテッドクエリを使い、JSONデータを外部データソースとして直接結合する
フェデレーテッドクエリは外部データソースへのクエリ機能であり、データをParquetに変換・パーティション化しないため、JSONを直接スキャンし続けることになりクエリコストの削減につながりません。
BAthena のCREATE TABLE AS SELECT(CTAS)でParquet形式・パーティション化したテーブルを作成し、以降INSERT INTOで日次追加する
✓ 正解
CTASでformat='PARQUET'とpartitioned_byを指定すればJSONを列指向Parquetへ変換しつつ日付でパーティション化でき、以降はINSERT INTOで日次追加できるため、別クラスター不要でAthena内完結かつスキャン量削減で最もコスト効率が高くなります。
CAmazon EMRでSparkジョブを実行し、JSONをParquetに変換してS3に書き戻す
EMRでの変換は可能ですが、Sparkクラスターのプロビジョニングと管理が発生するため、追加のETLクラスターを管理せずAthena内で完結したいという要件に反します。
DAWS Glue ETLジョブでDynamicFrameを使いJSONをParquetに変換しパーティション書き込みする
Glue ETLジョブでもParquet変換は可能ですが、ジョブの開発・実行というGlue外の別サービス管理が増えるため、Athena内で完結したいという条件を満たしません。
解説
Athenaのcreate table as select(CTAS)は、SELECTクエリの結果から新しいテーブルとデータファイルを生成する機能です。
format='PARQUET'やpartitioned_byを指定することで、JSONを列指向のParquetに変換しつつ日付でパーティション化できます。
以降の日次データはINSERT INTOで同テーブルに追加でき、別のETLクラスターを管理せずAthena内で完結します。Parquet化とパーティション化によりスキャン量が大幅に削減されコストが下がります。
選択肢Aの フェデレーテッドクエリ はデータ形式変換を行わず、JSONを直接スキャンするためコスト削減にならない。
選択肢Cの Amazon EMR はSparkクラスターの管理が必要で、「クラスターを管理せずAthena内で完結」という要件に反する。
選択肢Dの AWS Glue ETLジョブ でも変換は可能だが、Glueジョブの開発・実行という別サービスの管理が増え、Athena内完結の条件を満たさない。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDEAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →