【正解】B
【0からの解説】
①前提知識:BigQuery のマテリアライズド ビューは、集計などのクエリ結果をあらかじめ計算して保存しておく「事前計算済みのビュー」です。ベーステーブルが更新されると BigQuery がバックグラウンドで自動的に増分更新します。また、前回の更新以降にベーステーブルへ追加された変更(差分)があっても、保存済みの結果と差分を組み合わせて常に最新の結果を返します。さらに「スマート チューニング」により、ベーステーブルに対して書かれたクエリでも、マテリアライズド ビューで答えられる部分は自動的にビューを使うよう書き換えられます。事前計算済みの小さな結果を読むため、スキャン量(オンデマンド料金の課金対象)とスロット消費が減り、応答も速くなります。
②要件の整理:(1) 複数のクエリが「店舗 ID ごとのリアルタイムの売上高」という同じ集計を繰り返している、(2) 分析費用の最小化、(3) より速い結果、(4) 「リアルタイム」なので最新データを反映し続ける必要がある。
③正解の理由:同じ集計をマテリアライズド ビューにしておけば、毎回生データを全件スキャンして集計し直す必要がなくなり、費用と時間の両方を削減できます。自動更新と差分の組み合わせにより最新性も保たれるため、リアルタイムの売上高という要件にも合致します。繰り返し計算される集計の最適化として最も適した機能です。
【誤りの選択肢】
A:CSV ファイルから作った集計テーブルはその時点のスナップショットにすぎず、売上が変わるたびに手作業や独自のジョブで作り直す必要があります。リアルタイムの売上高を反映できず、更新の運用負荷もかかります。
C:BigQuery の主キー・外部キー制約(強制はされない制約)は、クエリ オプティマイザが不要な結合を省略したり結合順序を最適化したりするための情報として使われます。結合の効率化には役立ちますが、同じ集計を毎回計算し直すこと自体は避けられず、繰り返し計算による費用を抑える根本的な対策にはなりません。
D:パーティショニングは日付などで分割したテーブルの一部だけを読むことで読み取りバイト数を減らす有効な手法ですが、同じ集計の繰り返し計算はなくなりません。リアルタイムの集計では最新のパーティションを毎回集計し直すことになり、事前計算した結果を再利用できるマテリアライズド ビューほどの削減効果は得られません。
【参考】
マテリアライズド(実体化)ビューの概要マテリアライズド ビューを使用する主キーと外部キーを使用する