DEAデータストアの管理
ある企業は Amazon Redshift で直近3か月分の頻繁にクエリされるデータを保持し、それより古い2年分の履歴データは Parquet 形式で Amazon S3 に保管しています。履歴データへのクエリはまれですが、実行時には Redshift 上の最新データと結合して分析する必要があります。Redshift クラスターのストレージコストを最小化しつつ、この要件を満たす方法はどれですか。
A履歴データを Redshift Spectrum の外部テーブルとして定義し、S3 上の Parquet を直接クエリして Redshift テーブルと結合する
✓ 正解
Redshift Spectrum は S3 上の Parquet を外部テーブルとして定義し、Redshift のローカルテーブルと単一クエリで結合できます。履歴データをクラスターにロードしないためストレージコストが発生せず、まれなクエリは従量課金で対応でき要件に最適です。
B2年分の履歴データをすべて Redshift クラスターにロードし、最新データと同一テーブルで一元管理する
2年分の履歴データをすべて Redshift にロードすると、まれにしかアクセスしないデータでクラスターのストレージを大量に消費しコストが増大します。最新データのみ保持しストレージを最小化するという要件に反します。
C履歴データを Athena でクエリして結果を CSV にエクスポートし、分析のたびに Redshift へ一時ロードする
Athena でクエリして CSV をエクスポートし都度 Redshift にロードする方式は、分析のたびに手動 ETL と一時ストレージが必要で運用負荷が高く、Spectrum による直接結合に比べ非効率で遅延も大きくなります。
D履歴データを Amazon DynamoDB に移行し、Redshift の Federated Query を使って都度参照して結合する
DynamoDB はキーバリュー型で大規模な列指向の集計・結合分析には不向きであり、2年分の履歴を全スキャンする分析クエリでは性能・コストとも非効率です。Federated Query での参照も分析ワークロードには適しません。
解説
頻繁にクエリされる最新データは Redshift に保持し、まれにしかアクセスしない履歴データは S3 に置いたまま Redshift Spectrum で直接クエリするのが、クラスターのストレージコストを最小化する最適解です。
Redshift Spectrum は S3 上のデータ(Parquet 等)を外部テーブルとして定義し、Redshift のローカルテーブルと単一の SQL クエリで結合できます。履歴データを Redshift にロードする必要がないためストレージコストが発生せず、まれなクエリにはスキャン量に応じた従量課金で対応できます。
選択肢Bの全データロードは、まれにしか使わない2年分のデータで Redshift のストレージを大量に消費し、コストが増大する。
選択肢Cの Athena エクスポート+一時ロードは、クエリのたびに手動の ETL と一時ストレージが必要で運用負荷が高く非効率。
選択肢Dの DynamoDB 移行+Federated Query は、列指向の集計分析に DynamoDB が不向きで、大量履歴データのスキャンも非効率かつ高コストになる。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDEAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →