正解:D
要件の分析
-
データウェアハウスのプラットフォーム: BigQuery
-
履歴の保持: すべての更新について履歴レコードを保持する(SCD Type 2 またはそれに類似したアプローチが必要)。
-
使いやすさ/シンプルさ: アナリストが簡単にクエリできること。
-
コスト効率: BigQuery はスキャンされたデータ量に基づいて課金されるため、これは重要な考慮事項です。
🔑 選択肢の評価
-
BigQuery と非正規化(Denormalization)
-
BigQuery は、従来のOLTPデータベースとは異なり、結合(JOIN)がコストとパフォーマンスのボトルネックになりやすいアーキテクチャです。
-
非正規化し、
STRUCT(ネストされたフィールド)とARRAY(繰り返しフィールド)を使用して関連データを1つのテーブルにまとめることが、BigQuery のベストプラクティスです。これにより、結合が減り、クエリがシンプルで高速になり、スキャンするデータ量を減らせる場合があるため、シンプルさとコスト効率の要件に合致します。 -
したがって、AとBの正規化モデルは、BigQuery の設計としては最適ではありません。
-
-
履歴の保持(SCD Type 2)と追記のみ(Append-Only)
-
データを毎月更新する必要があり、すべての履歴を保持する必要がある場合、これはSCD Type 2 (Slowly Changing Dimension Type 2) の要件です。
-
BigQuery で履歴を追跡する最もシンプルでコスト効率の高い方法は、既存の行を更新するのではなく、常に新しい行を挿入(追記)することです(Append-Only)。これにより、更新や削除のオーバーヘッドがなくなり、テーブル設計が簡素化されます。
-
履歴は、行が BigQuery に取り込まれたときのタイムスタンプ(
_PARTITIONTIMEやカスタムの取り込みタイムスタンプフィールド)を使用して追跡できます。
-
-
C vs D:
-
C(非正規化 + テーブルの更新 + スナップショット): BigQuery で頻繁にテーブル全体を更新(上書き)したり、スナップショットを使用したりするのは、複雑で管理コストがかかり、追記のみのアプローチよりもコスト効率が悪い可能性があります。
-
D(非正規化 + 追記のみ + ネスト/繰り返しフィールド):
-
非正規化 + ネスト/繰り返し: BigQuery のベストプラクティスに合致し、クエリのシンプルさ、使いやすさ、パフォーマンスを最適化します。
-
追記のみ: データの不変性を保証し、テーブルの更新や管理の複雑さを排除します。
-
取り込みタイムスタンプ: 履歴データを追跡するためのシンプルなメカニズムを提供します。
-
-
結論として、BigQuery のアーキテクチャの特性、パフォーマンス、コスト、および履歴保持の要件を考慮すると、D のアプローチが最適です。

コメント