クイズの説明
Step 2「データレイクとウェアハウスを設計しよう」の理解度を確認します。データレイク、DWH、レイクハウス、ディメンショナルモデリングについて問います。
合格ライン: 80%(5問中4問正解)
問題
Q1. ファイルフォーマットの選択
データレイクにおいて、分析クエリ(特定の列のみをSELECTするクエリ)に最適なファイルフォーマットはどれですか?
- A. CSV — 汎用性が高く、どのツールでも読み取れるため
- B. JSON — スキーマが柔軟で、ネストされたデータに対応するため
- C. Parquet — 列指向フォーマットで、必要な列のみを効率的に読み取れるため
- D. Avro — スキーマ進化に強く、行指向で全データを高速に処理できるため
答えを見る
正解: C
Parquetは列指向(columnar)フォーマットであり、特定の列のみをSELECTする分析クエリに最適です。例えば100列あるテーブルから3列だけを取得する場合、Parquetでは3列分のデータのみをディスクから読み取ります。CSVやJSON(行指向)では全列のデータを読み取ってからフィルタするため、I/Oが増大します。また、Parquetは列ごとに圧縮するため、同じ型のデータが連続し高い圧縮率が得られます。
Q2. レイクハウスの利点
レイクハウスアーキテクチャがデータレイクと比較して優れている最大の利点はどれですか?
- A. ストレージコストが安い
- B. ACIDトランザクションとタイムトラベルにより、データの信頼性と再現性が確保できる
- C. 非構造化データを扱える
- D. オブジェクトストレージを使用する
答えを見る
正解: B
レイクハウスの最大の利点は、データレイク(オブジェクトストレージ)上にACIDトランザクション、タイムトラベル、スキーマ管理を実現することです。Delta Lake、Apache Iceberg等のテーブルフォーマットにより、同時書き込みの整合性が保証され、過去の特定時点のデータを参照できます(タイムトラベル)。データレイクでも非構造化データは扱え(C)、オブジェクトストレージも使用し(D)、ストレージコストも同等(A)です。ACIDトランザクションとタイムトラベルがレイクハウス固有の強みです。
Q3. SCD Type 2
Slowly Changing Dimension Type 2が必要なシナリオとして最も適切なものはどれですか?
- A. 顧客のメールアドレスが変更された場合、常に最新のメールアドレスのみが必要
- B. 顧客のセグメントが「SMB」から「Enterprise」に変わった場合、変更前のセグメントでの売上と変更後のセグメントでの売上を区別して分析したい
- C. 商品の価格が変更された場合、変更前の価格は不要で最新価格のみで集計したい
- D. ユーザーの生年月日を記録する場合
答えを見る
正解: B
SCD Type 2は、属性の変更履歴を保持する必要がある場合に使用します。顧客セグメントが変更された場合、変更前の期間はSMBとして、変更後の期間はEnterpriseとして売上を正しく集計するために、両方のバージョンを新しい行として保持します。A(メールアドレス)は最新のみでよいのでType 1、C(最新価格のみ)もType 1、D(生年月日)は不変なのでType 0が適切です。
Q4. コンフォームドディメンション
「同じ指標なのに数字が違う」問題を解決するためにKimballが提唱した手法はどれですか?
- A. スノーフレークスキーマ — ディメンションを正規化することで一意性を保証する
- B. コンフォームドディメンション — 複数のファクトテーブルで共有される標準化ディメンションを定義する
- C. データボルト — ハブ・リンク・サテライトで柔軟な変更に対応する
- D. ワイドテーブル — すべてのデータを1つのテーブルに結合して一元管理する
答えを見る
正解: B
コンフォームドディメンション(Conformed Dimensions)は、複数のファクトテーブル(売上、サポート、マーケティング等)で共有される標準化されたディメンションです。例えばdim_customerのsegment列の定義を全社で統一することで、どのファクトテーブルから集計しても同じ顧客セグメント分類が適用されます。これにより「売上チームのEnterprise顧客数」と「サポートチームのEnterprise顧客数」が一致します。
Q5. クエリ最適化
BigQueryで以下のテーブルに対して日付範囲のクエリを頻繁に実行する場合、最も効果的な最適化はどれですか?
テーブル: fact_orders(1億行、100列) 頻出クエリ:
SELECT customer_id, SUM(amount) FROM fact_orders WHERE order_date BETWEEN '2025-01-01' AND '2025-03-31' GROUP BY customer_id
- A. テーブル全体にCLUSTER BY order_dateを設定する
- B. order_dateでPARTITION BYし、customer_idでCLUSTER BYする
- C. インデックスを作成する
- D. テーブルをCSVフォーマットに変換する
答えを見る
正解: B
BigQueryでは、最も効果的な最適化はパーティショニングとクラスタリングの組み合わせです。PARTITION BY DATE(order_date)によりWHERE句の日付範囲で不要なパーティションをスキャンせず、CLUSTER BY customer_idによりGROUP BY句のcustomer_idでデータの局所性が向上します。A(CLUSTERのみ)はパーティションプルーニングの効果がなく、C(インデックス)はBigQueryにはないアプローチ、D(CSV)は列指向の利点を失います。パーティショニングだけで90%以上のスキャン量削減が見込めることも多いです。
結果
合格(4問以上正解)
Step 2の内容をよく理解しています。データレイク、DWH、レイクハウスの設計手法と、ディメンショナルモデリングの実践的な知識を身につけました。次のStep 3「ストリーム処理とリアルタイム分析を設計しよう」に進みましょう。
不合格(3問以下正解)
Step 2の内容を復習しましょう。特に以下のポイントを重点的に確認してください:
- ファイルフォーマット — Parquet(列指向)とAvro(行指向)の使い分け
- レイクハウス — ACIDトランザクションとタイムトラベルの利点
- SCD — Type 0/1/2の使い分け
- コンフォームドディメンション — 指標統一の仕組み
推定所要時間: 30分