ファクトテーブルの処理とは?代理キーと参照整合性のポイントを解説
ファクトテーブルの処理とは
ファクトテーブルは複合主キーを採用しており、これは各ディメンションテーブルに対応する複数の外部キーと、これらのディメンションを使用する各メジャー(測定値)のカラムで構成されます。
データステージングにおける代理キーへの置き換え
すべてのデータステージングプロセスには、受信したファクトテーブルのレコードに含まれる本番環境のIDを、データウェアハウスの代理キー(サロゲートキー)に置き換えるステップが必須です。この置き換えは、ファクトテーブル内の各ディメンションに対して行われます。さらに、必要に応じてその他の処理、計算、再構築も実施されます。
参照整合性(RI)の重要性
データウェアハウスにおける参照整合性(Referential Integrity:RI)とは、ファクトテーブルの各外部キーについて、対応するディメンションテーブルに該当するエントリが必ず存在することを保証するルールです。
例えば、ファクトテーブルに製品番号323442の販売記録がある場合、Productディメンションテーブルにも同じ番号の製品が登録されていなければなりません。そうでなければ「何を売ったのか」が判別できず、実在しない製品に対する売上記録になってしまいます。
代理キー検索の2つの種類
代理キーを規律正しく一貫して運用するためには、抽出ロジックにおいて常に次の2種類の代理キー検索を実行する必要があります。
1つ目: 変更されたディメンションレコードに遭遇し、緩慢変化ディメンション(SCD)Type 2の手法を適用する場合には、新しい代理キーを作成します。
これは、ディメンションレコードの不定期な変更を扱うための中心的なテクニックです。変更対象の項目に対して新しいディメンションレコードを作成し、まったく新しい代理キーを割り当てます。この新レコードにおいて元のレコードと異なるのは、代理キーと、変更のきっかけとなったフィールドだけです。
2つ目: ファクトテーブルのレコードを処理する際に行われる代理キー検索です。参照整合性を維持するため、常にディメンションレコードの更新を先に完了させることを忘れないでください。こうすることで、ディメンションテーブルが主キーの正当な供給源として機能し続けます。この2つ目の検索では、ファクトテーブルレコード内の本番キーを、適切な最新の代理キーの値へと置き換えます。
ファクトレコードのロード準備
ファクトテーブルのすべての本番キーが代理キーに置き換えられれば、ファクトレコードはロード可能な状態になります。ファクトテーブルレコード内のキーは、それぞれのディメンションテーブルへの適切な外部キーとして選択されているため、ファクトテーブルはディメンションテーブルに対する参照整合性が保証されるのです。
参照整合性を守るための注意点
ただし、この場面では「疑い深い」くらい慎重であることが大切です。ここまで説明した一連の入念な管理作業は、実際のデータベースロード前に参照整合性を確立するものです。それでも、1つ以上のディメンションテーブルのロードに失敗したり、依存するファクトレコードが残っているにもかかわらずディメンションレコードを削除してしまうなどの管理上のミスにより、参照整合性を損なう可能性は十分にあります。
-
10.0.0.1とは?プライベートIPアドレスの意味とログイン方法・トラブル対処法
10.0.0.1は、クライアントデバイスに割り当てられたり、ネットワーク機器のデフォルトIPアドレスとして設定されたりする、プライベートIPアドレスです。 10.0.0.1とは? 10.0.0.1は、家庭向けネットワークよりも企業向けコンピューターネットワークでよく見られるIPアドレスです。家庭用ルーターでは通常、192.168.1.1や192.168.0.1など、192.168.x.x系のアドレスが使われます。ただし、家庭内のデバイスに10.0.0.1が割り当てられることもあり、その場合も他のIPアドレスとまったく同じように機能します。 クライアントデバイスが10.0.0.xの範囲(例:1
-
MySQLのテーブル名の最大長は?64文字制限の確認方法とエラー例
MySQLのテーブル名の最大長は64文字MySQL バージョン8.0.12において、テーブル名(識別子)の最大長は64文字です。この上限を超えるテーブル名を指定してテーブルを作成しようとすると、作成は失敗し、エラーがスローされます。なお、この64文字という制限はテーブル名だけでなく、データベース名やカラム名など、MySQLが扱う各種識別子にも共通して適用されるものです。インストールされているMySQLのバージョンを確認するまず、ご自身の環境にインストールされているMySQLのバージョンを確認しておきましょう。以下のSQLコマンドを実行します。 mysql> select version(