Question#3(Professional Data Engineer)

Question#3(Professional Data Engineer)
あなたは、通信サービスプロバイダーの販売データを分析するために BigQuery でデータウェアハウスを設計しています。顧客、製品、サブスクリプションのデータモデルを作成する必要があります。すべての顧客、製品、サブスクリプションは毎月更新される可能性がありますが、すべてのデータの履歴レコードを保持する必要があります。あなたは、現在および履歴のレポート作成のために、視覚化レイヤーを使用することを計画しています。データモデルがシンプルで使いやすく、コスト効率が高いことを保証する必要があります。あなたは何をすべきですか?
ディスカッション 0

正解:D

要件の分析

  1. データウェアハウスのプラットフォーム: BigQuery

  2. 履歴の保持: すべての更新について履歴レコードを保持する(SCD Type 2 またはそれに類似したアプローチが必要)。

  3. 使いやすさ/シンプルさ: アナリストが簡単にクエリできること。

  4. コスト効率: 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(非正規化 + 追記のみ + ネスト/繰り返しフィールド):

      1. 非正規化 + ネスト/繰り返し: BigQuery のベストプラクティスに合致し、クエリのシンプルさ、使いやすさ、パフォーマンスを最適化します。

      2. 追記のみ: データの不変性を保証し、テーブルの更新や管理の複雑さを排除します。

      3. 取り込みタイムスタンプ: 履歴データを追跡するためのシンプルなメカニズムを提供します。

結論として、BigQuery のアーキテクチャの特性、パフォーマンス、コスト、および履歴保持の要件を考慮すると、D のアプローチが最適です。


コメント

コメント

コメントする

目次