DB Stories

DBに関する過去、現在、未来の話題をプロフェッショナルの視点で紹介

ディメンションテーブルの整合性(conformed dimensions) (7)

ディメンションの重複関係による整合性(conformed rollups)

ディメンションテーブルの整合性は、テーブルの共有以外によっても担保することができます。以下の条件を持っている場合は、実体として別のテーブルであっても整合性を確保することが可能です。

  • 片方のディメンションテーブル属性がもう片方のディメンションテーブルのサブセット(準拠関係)である場合
  • 共通のディメンション項目が同一定義でデータが同一であること

これらの条件を満たす場合、これらのディメンションテーブルは整合性が保たれている(準拠している)ことになり、スタースキーマ間の業務横断検索が可能となります。これらの2つのディメンションのうち小さい(包含される)方を整合性のある重複(conformed rollup)以降、準拠しているロールアップ とよび、大きい(包含する)方を基本ディメンション(base dimension)と呼びます。 f:id:good-value:20171007155824j:plain

前回説明した上図において、「月(month)」と「地区(territory)」テーブルは「日(day)」「販売員(salesrep)」の整合性のあるロールアップになっています。「月」テーブルのすべての項目は「日」に存在し、「地区」テーブルのすべての項目は「販売員」に存在しています。整合性のある包含は基本ディメンションに存在しない1つのカラム、つまりサロゲートキーを持ちます。

ディメンション属性の共有についてはデータ内容についてさらに精査が必要となります。まず、同じ方法で登録されたデータであることが重要です。 f:id:good-value:20180522224409j:plain

この図において、月に関する情報は「日(day)」「月(month)」ディメンションテーブルに存在していて、"January", "February"と整合性のある状態で保持されています。また、地域に関する情報は「販売員(salesrep)」「地域(territory)」に"North", "South"という形で整合性が保たれています。これらの整合性により業務横断検索のPhase2においてデータのマージが可能になっています。

この共通項目に存在するデータの組み合わせについても同一であることが必要となります。例えば、日(day)テーブルに「monthにJanuary」「yearに2009」をもつ場合、月(month)テーブルにおいても同じ組み合わせのデータを持つ必要があります。そうでなければ、検索の組み合わせを作成するクエリー(Browse query)によって、同一データを作成することができないことになります。 f:id:good-value:20181119222626j:plain

この整合性のあるロールアップ(conformed rollup)を保証するベストな方法は、この基本ディメンション項目作成の流れでrollupデータを作成してしまうことです。これにより、ソースデータに基づくデータの作成が保証されます。開発者は基本ディメンション作成処理を先に確認して、新規行もしくは変更のあった行についてrollupデータについての確認を行います。もしくは、ソースデータでの変更から一連の流れとしてbaseとrollupの作成までを同時に実施してしまうことです。 some開発者は正規化データを保持するステージングエリアデータを使うことでデータ変更を検知した後に、基本ディメンションとロールアップへの適用を行います。

ETL開発者は整合性のあるロールアップについての副作用を見つけることがあります。type1アプリケーションの変更において、複数の行データをロールアップディメンションにマージすることが必要となります。この問題については、すでにあるファクトテーブルのレコードから参照されるサロゲートキーを持つ行が統合(マージ)することになるため、ファクトテーブルのサロゲートキー項目(ディメンションへの外部参照キー)の更新が必要となります。この種の処理を避けるために、準拠したロールアップとするために、サロゲートキーは別のものではあるが同一属性の行を複数保持することを許容させます。