DEAデータストアの管理
ある企業がAmazon Redshiftでデータウェアハウスを運用しています。
5億行の売上ファクトテーブル(sales_fact)と100万行の顧客ディメンションテーブル(customer_dim)をcustomer_idで結合するクエリが頻繁に実行されます。
EXPLAINプランを確認したところ大量のデータ再配布(DS_DIST_INNER)が発生していることが判明しました。
この問題を解決するために最適な分散スタイルの組み合わせはどれですか?
Asales_factをEVEN分散、customer_dimをALL分散にそれぞれ設定してデータを均等に配置する
sales_factをEVEN分散にするとcustomer_idが各スライスにランダム配置されるため、customer_idでの結合時に依然としてデータ再配布(DS_DIST_INNER)が発生します。EVEN分散はスキャン主体のクエリには有効ですが特定キーでの結合性能改善には不向きです。
Bsales_factをcustomer_idでKEY分散、customer_dimをALL分散に設定してデータ再配布を排除する
✓ 正解
大規模ファクトテーブルを結合キーでKEY分散し、小規模ディメンションテーブルをALL分散にする組み合わせはRedshiftの定石パターンです。同一スライスで結合データが揃いネットワーク転送が不要になるため、EXPLAINプランのDS_DIST_INNERが解消されます。
Csales_factとcustomer_dimの両方をcustomer_idでKEY分散して同一スライスに結合データを集約する
両テーブルを同じKEYで分散するとファクトテーブルは最適化されますが、ディメンションテーブルも各スライスに分散されるため、対応するディメンションデータが別スライスに存在する場合に再配布が発生することがあります。
Dsales_factとcustomer_dimの両方をALL分散に設定してすべてのコンピュートノードに完全複製する
5億行のファクトテーブルをALL分散にすると全スライスにコピーされるためストレージ消費量が大幅に増大し書き込みコストも跳ね上がります。ALL分散は通常、数十万行以下の小規模テーブルに適した設定です。
解説
選択肢BはRedshiftのデータ再配布(DS_DIST_INNER)を排除する最適パターンです。大規模なファクトテーブル(sales_fact)は結合キー(customer_id)でKEY分散し、同一customer_idのレコードが同一スライスに配置されるようにします。小規模なディメンションテーブル(customer_dim)はALL分散にして全スライスにコピーすることで、どのスライスでも結合相手のデータが揃いネットワーク転送が不要になります。このKEY+ALLの組み合わせがファクト・ディメンション結合の最適パターンです。
選択肢AのEVEN分散とALL分散の組み合わせは、sales_factがEVEN分散のままだとcustomer_idが各スライスにランダム配置されるため、結合時に依然としてデータ再配布が発生します。
選択肢Cの両テーブルをKEY分散にする方法は、customer_dimも各スライスに分散されるため一部のスライスに対応するディメンションデータが存在せず再配布が起きる可能性があります。
選択肢DのALL分散は小規模テーブル向けの設定で、5億行のsales_factを全スライスに複製するとストレージコストと書き込み負荷が大幅に増加し現実的ではありません。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDEAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →