DatabricksレイクハウスプラットフォームにおけるData Vault実装の規範的ガイド

[What’s a Data Vault and How to Implement It on the Databricks Lakehouse Platform \- The Databricks Blog](https://www.databricks.com/blog/2022/06/24/prescriptive-guidance-for-implementing-a-data-vault-model-on-the-databricks-lakehouse-platform.html)の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

Kimball、Inmon、Data Vault方法論のように業界固有のドメインモデルのように、分析システムの設計を行う際に活用できる様々なデータモデルが存在します。皆様固有の要件によって、[レイクハウス](https://www.databricks.com/research/lakehouse-a-new-generation-of-open-platforms-that-unify-data-warehousing-and-advanced-analytics)を設計する際にこれら異なるモデリング技術を活用することができます。それぞれはすべて、自身の強みを持っており、異なるユースケースにフィットします。

究極的にデータモデルは、1:1、1:多、多:多で定義されるリレーションシップを用いて様々なテーブルを定義する構造以外の何者でもありません。データプラットフォームは、情報取得をより容易にし、優れたパフォーマンスを提供できるように、データモデルの物理化においてベストプラクティスを提供すべきです。

以前の記事では、[Delta Lakeを用いてDatabricksでスタースキーマを実装する5つのシンプルなステップ](https://qiita.com/taka_yayoi/items/f644b9c6d01feb853ab1)をカバーしました。この記事では、Data Vaultとは何か、Bronze/Silver/Goldレイヤーでどのようにそれを実装するのか、DatabricksレイクハウスプラットフォームにおけるData Vaultでどのようにベストなパフォーマンスを得るのかを説明します。

# Data Vaultモデリング

Data Vaultモデリングのゴールは、設計によって早いペースで変化するビジネス要件に適応し、データウェアハウスの高速かつ迅速な開発をサポートすることです。Data Vaultは、ハブ、リンク、サテライトデザインを用いてデータモデルを容易に拡張し、きめ細かくできるので、設計とETLの変更を容易に実装することができ、レイクハウスの方法論に非常にフィットします。

Data Vaultのいくつかのビルディングブロックを理解しましょう。通常は、Data Vaultモデルには3つのタイプのエンティティがあります:

- **Hubs** - ハブは、顧客、製品、注文のようなコアのビジネスエンティティを表現します。アナリストは、ハブに関する情報を取得するために自然なビジネスキーを使用します。ハブテーブルの主キーは通常、ビジネスコンセプトのID、ロード日、その他のメタデータ情報の組み合わせから作成されます。
- **Links** - リンクはハブのエンティティ間の関係を表現します。joinのキーのみを持ちます。これは、ディメンショナルテーブルのFactless Factテーブルのようなものです。属性はなく、joinキーのみです。
- **Satellites** - サテライトテーブルは、ハブやリンクにおけるエンティティの属性を保持します。これらは、コアなビジネスエンティティの説明的な情報となります。これらは、ディメンションテーブルの正規化されたバージョンのようなものです。例えば、顧客ハブには、顧客の位置的属性、顧客のクレジットスコア、ロイヤリティレイヤーのような多くのサテライトテーブルがあります。

Data Vault方法論の大きな利点は、データモデルを変更した際に既存のETLジョブのリファクタリングが非常に少ないと言うことです。Data Vaultは「書き込み最適化」方法論のスタイルであり、迅速な開発アプローチをサポートし、データレイクやレイクハウスアプローチにとてもフィットします。
![](https://www.databricks.com/wp-content/uploads/2022/06/db-242-blog-img-1.png)
*Data Vaultモデリングが互いに接続されたハブ、リンク、サテライトを用いてどのように動作するのかを示す図*

# Data Vaultはどのようにレイクハウスにフィットするのか

いくつかのお客様でDatabricksレイクハウスアーキテクチャでData Vaultモデリングをどのように活用しているのかを見ていきましょう。
![](https://www.databricks.com/wp-content/uploads/2022/06/db-242-blog-img-2.png)
*レイクハウスにおけるData Vaultアーキテクチャ*

# DatabricksレイクハウスにおけるData Vault実装における検討

- Data Vaultモデリングは、主キーとしてビジネスキーの八種を使用することを推奨しています。Databrikcsでは、ビジネスキーをサポートするためにすぐに利用できる[hash](https://docs.databricks.com/sql/language-manual/functions/hash.html)、[hash](https://docs.databricks.com/sql/language-manual/functions/hash.html)、[SHA](https://docs.databricks.com/spark/latest/spark-sql/language-manual/functions/sha2.html)関数をサポートしています。
- Data Vaultレイヤーには、ランディングゾーン(そして、時にはステージングゾーン)の概念があります。これら両方の物理レイヤーはデータレイクハウスのブロンズレイヤーに自然にフィットします。Avro、CSV、parquet、XML、JSONフォーマットのようなデータがランディングゾーンに到着すると、後続のETLが非常に高速になるように、ステージングゾーンでDeltaフォーマットのテーブルに変換されます。
- 生のVaultはランディングゾーン、あるいはステージングゾーンから作成されます。生のData Vaultのハブ、リンク、サテライトテーブルとしてデータはモデリングされます。生のData Vaultをロードする際には通常、追加の「ビジネス」ETLルールは適用されません。
- ETLビジネスルール、データ品質ルール、クレンジング、準拠ルールのすべては、生のVaultとビジネスVaultの間で適用されます。ビジネスVaultテーブルは、標準化されクレンジングされたデータの企業の「中央リポジトリ」として機能するデータドメインごとに整理することができます。データスチュワードやSMEは、ビジネスVaultの自分たちの領域におけるデータ品質やビジネスルール、ガバナンスのオーナーシップを持ちます。
- Point-in-Time (PIT)やブリッジテーブルのようなクエリーヘルパーテーブルは、ビジネスVaultの上にあるプレゼンテーションレイヤー向けに作成されます。PITテーブルは、いくつかのサテライト、ハブが事前にjoinされ、「ポイントインタイム」のフィルタリングのWHERE条件を提供するので、クエリー性能を向上させます。ブリッジテーブルは、エンティティに対するビューのようなflattenされた「ディメンショナルテーブル」を提供するために、事前にハブやエンティティをjoinします。[Delta Live Tables](https://www.databricks.com/jp/product/delta-live-tables)はまさにマテリアライズドビューなようなものであり、ビジネスData Vaultの上のGold/プレゼンテーションレイヤーのポイントインタイムテーブル、ブリッジテーブルを作成するのに活用することができます。
- ビジネスプロセスは変化し、適応するので、Data Vaultモデルはディメンショナルモデルのように膨大なリファクタリングを必要とすることなしに、容易に拡張することができます。追加のハブ(対象領域)を容易にリンク(純粋なjoinテーブル)に追加でき、追加のサテライト(顧客セグメントなど)を最小限の変更でハブ(顧客)に追加することができます。
- また、Goldレイヤーのデータウェアハウスへのディメンショナルモデルのロードも、以下の理由から容易なものになります:
    - ハブによってキー管理が容易になります(ハブから得られる自然なキーは[Identity columns](https://docs.databricks.com/sql/language-manual/sql-ref-syntax-ddl-create-table-using.html)を通じてサロゲートキーに変換することができます)。
    - サテライトにはすべての属性が含まれているので、ディメンションのロードが容易になります。
    - リンクにはすべてのリレーションシップが含まれているので、ファクトテーブルのロードが非常にわかりやすいものになります。

# DatabricksレイクハウスでData Vaultモデルのベストなパフォーマンスを得るためのTips

- 生のVault、ビジネスVault、GoldレイヤーのテーブルにはDeltaフォーマットを使いましょう。
- ハブ、リンク、サテライトのすべてのjoinキーに[OPTIMIZEとZ-order](https://docs.databricks.com/sql/language-manual/delta-optimize.html)を使うようにしてください。
- テーブル、特に小規模なサテライトテーブルをパーティショニングしすぎないでください。Z-orderとは別に追加のインデックスを作成する必要がある場合には特にベストなパフォーマンスを提供できるように、フィルタリングを行う日付カラム、最新を示すフラグのカラム、述語カラムには[Bloom filter indexing](https://docs.databricks.com/spark/2.x/spark-sql/language-manual/create-bloomfilter-index.html)を使用してください。
- Delta Live Tables(マテリアライズドビュー)によって、PITテーブルの作成、管理が非常に容易になります。
- `optimize.maxFileSize`をデフォルトの1GBではなく、32-64MBのような小さい値にしてください。[小規模なテーブルを作成](https://docs.databricks.com/delta/optimizations/file-mgmt.html)することで、ファイルプルーニングの恩恵を受けることができ、joinの際に必要なデータの取得におけるI/Oを最小化することができます。
- Data Vaultモデルでは比較的多いjoinが発生するので、ベストなjoin戦略が自動で採用されるAdaptive Query Executionがデフォルトでオンになっている最新のDBRを使用してください。(高度なパフォーマンスチューニングで)必要であれば[Join hints](https://docs.databricks.com/spark/latest/spark-sql/language-manual/sql-ref-syntax-qry-select-hints.html#join-hints)を使用してください。

Data Vaultモデリングの詳細については、[Data Vault Alliance](https://datavaultalliance.com/)をご覧ください。

# レイクハウスでData Vault構築をスタートする

[14日間のDatabricks無料トライアル](https://databricks.com/jp/try-databricks)

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)