CData Sync でSlowly Changing Dimension(SCD)を実現する方法

桑島義行 | 2022年12月03日

はじめに

Slowly Changing Dimension(以下、SCD) は、データウェアハウスで分析軸となるデータの履歴をどのように保管するかをタイプ別に分類したデータモデリング手法です。本記事では、ノーコードでデータ基盤を構築可能なCData Sync製品でどのようにSCDのタイプ別のモデルを構築することができるかを説明します。

Slowly Changing Dimensionとは

Slowly Changing Dimensionとは、データ分析基盤となる中核であるデータウェアハウスで分析軸となるマスタデータの属性値の履歴管理をどのように保管するかをタイプ別に分類したデータモデリング手法です。そのタイプは、Type0からType7までと8種類ありますが、本記事では代表的なType1〜3についてご紹介します。

取引先マスタの請求先住所の変更を例にType1〜3を見ていきましょう。モデルを簡単にするためにサロゲートキー(代替キー)の使用や市区郡町村(City)以外の住所は省略しています。

以下の取引先「CData商事」は、住所を川崎市から横浜市に移転しました。そのため請求先住所を2022-12-03に横浜市に変更しました。

 
 

Type1 : Overwrite(最新値のみを保管)

Type1では、常に最新データのみを保持する方法です。請求先住所(BillingCity)には移転後の横浜市が格納されます。
 
 
そのため、過去の住所は分析軸となるマスタデータには保持されていないため、請求書などのトランザクション(取引)データにその時の住所を保持していないと、過去の特定時点での住所(川崎市)のデータ取得・分析はできなくなります。ただし、トランザクションデータ(この場合は、請求書)に発行時点の請求先住所を保管していることが一般的でしょう。
 

Type 2: Add a New Record (レコードを追加)

Type2は、属性(例:住所)変更があったレコードに対する新しいレコードを追加する方法です。以下の例では、川崎市から横浜市に住所変更があった顧客に対して住所変更前の川崎市のレコードは残したまま、横浜市のレコードを新規に追加します。これにより顧客の住所の変異をトレースできるようになります。これはデータウェアハウスに取り込むソースとなる業務システムはOLTP型が一般的で最新データのみを保持していることが多いため、データウェアハウスを設置する一つの目的でもある履歴を保持する要件を満たすことができるアプローチです。
 
 
上記例のようにStartDate(レコードの作成日)、EndDate(別な新しいレコードの作成日)、Latest(最新レコードかどうか)のような項目を保持しておくと、ある特定日付時点での顧客の断面データの取得や最新データのみを取得するといった様々なユースケースにマッチしたデータ取得を可能とします。
 

Type 3: Add a New Field (フィールドを追加)

Type3は、変更前後の値を別フィールドに保持しておく方法です。
 
 
1レコード内に変更前の請求先住所(PreviousBillingCity)を保管することで、特定顧客の住所変更の前後の情報を取得することが出来ます。ただし、複数回数の住所変更を保管するには、その数だけのフィールドを準備しておく必要があり、一部(例:前回のみ)の履歴データのみ保管することが出来るアプローチと考えるのが良いでしょう。

CData SyncでのSCD対応状況

CData Syncでは、ELTと呼ばれるデータウェアハウスにデータをロードしてからデータウェアハウス内の処理として変換を行う方式でデータ分析基盤の構築を実現することが可能です。
 
一般的にSlowly Changing Dementionを用いたデータモデリングはデータ変換(Transform)の中で行われます。CData SyncではTに相当するデータ変換機能として、dbtと呼ばれるモダンなデータモデリング環境の構築を利用することが出来ます。
 
 
dbtではSnapshotと呼ばれるSCD Type2を実現できる機能がありますので、本機能を利用するのも一つの方法です。
 
 
一方で、CData Syncでは、ETLと呼ばれる従来から良く採用されてきたデータ変換してからデータウェアハウスにロードする方式でのデータ分析基盤の構築も可能です。
 
ETL方式の場合、CData Syncでは SCD Type1とType2をノーコードで実現することが出来ます。
 
SCD Type1
 
CData Syncのデフォルトでの動作です。CData Syncで同期ジョブを実行するとソースシステムの最新の値でデータウェアハウスに格納されます。なお、CData Syncは、高度な差分更新メカニズムを持っているため、ソースシステムが主要なRDBMSの場合は、CDCと呼ばれる変更データキャプチャの仕組みを利用して、SaaSなどのアプリケーションの場合でもソースシステム側の変更分のみを取得してデータウェアハウスのデータを更新する仕組みを持っています。
 
 
SCD Type2
 
CData SyncのV22版の新機能としてHistory Modeと呼ばれるデータの履歴管理に関する機能が追加されました。本機能を利用することでSCD Type2での履歴管理を可能とします。History Modeの使い方についてはこちらの記事をご覧ください。
 
 
また、以下のように月次の四半期などの定期サイクルでのスナップショットデータを保管したいケースもあるでしょう。
 
その場合は、以下の記事のようにジョブに変数を設定することで実現可能です。詳しくはこちらの記事をご参照ください。
 
 
なお、SCD Type3についてはCData Syncを利用したETL方式では実現する方法がなく、SCD Type2でデータウェアハウスに取り込んだ後のELT方式のデータ変換処理で別テーブルとして作成する方法となります。
 

まとめ

本記事では、ノーコードでデータ基盤を構築可能なCData Sync製品でどのようにSCDのタイプ別のモデルを構築することができるかを説明しました。モダンなデータモデリング機能であるdbtをCData Syncから統合して実現する方法、更には、CData SyncのCDC(Change Data Capture)機能やヒストリーモード、ジョブの変数設定の機能を利用する方法をご紹介しました。これらの機能を活用することにより様々なユースケースや設計方針に沿ったデータ基盤構築環境で柔軟なデータの履歴管理を実現することが出来ます。CData Sync製品は、30日の無償評価版がありますので是非お試しください。