[翻訳] Striking Gold: ブロンズ、シルバー、ゴールドの各層のメダリオンアーキテクチャをマスターする

同僚の [RK Iyer](https://rkniyer999.medium.com/) が書いた [Striking Gold: Mastering Medallion Architecture for Bronze, Silver, and Gold Tiers](https://rkniyer999.medium.com/striking-gold-mastering-medallion-architecture-for-bronze-silver-and-gold-tiers-0742aa7e5756) (共著 [Sen Sayantani](https://medium.com/@sen.sayantani)) の翻訳記事です。正確な内容については原文を参照してください。

BEST PRACTICES & TIPS FOR TO DESIGN MEDALLION ARCHITECHTURE

# 背景
データは、顧客とのやりとりに関する洞察を提供し、エンドユーザーと収益性の両方を最適化するための、あらゆる現代ビジネスのドライバーです。これにより、データレイク/レイクハウスの作成が必要になります。レイクハウスアーキテクチャを構築する際には、データがレイクハウスにロードされる前に、データアーキテクチャを論理的に整理するための入念な計画が重要です。この戦略的な組織とガバナンスは、データスワンプを防ぐ上で重要な役割を果たします。

計画段階では、いくつかの重要な質問に答える必要があります。例えば、データをブロンズ（生データ）、シルバー（検証済み）、ゴールド（エンリッチ）などの複数のレイヤーに分割する方法は？ 各レイヤーに最適なファイル形式は何か？ 各レイヤー内の構造はどうあるべきか？ レイクハウスを効果的に保護し、管理する方法は？ などがあります。

多くの組織が、上記の質問に答えるために、様々な形でメダリオンアーキテクチャを採用しています。理論的には単純な概念のようですが、実装する際にニュアンスが明らかになります。このブログでは、レイクハウスの旅を始める方々にガイダンスを提供することを目指しています。データレイクの実装経験から学んだことを基に、基本的な概念と考慮事項をカバーし、堅牢なデータ基盤を構築するお手伝いをします。

# メダリオンアーキテクチャとは何か？
メダリオンアーキテクチャとは、データをレイクハウス内で論理的に整理するために使用されるデータデザインパターンであり、データがアーキテクチャの各レイヤー/ゾーンを流れるにつれて、データの構造と品質を段階的かつ進歩的に改善することを目的としています。

> メダリオンアーキテクチャは、ブロンズ⇒シルバー⇒ゴールドという順序で組織された「マルチホップアーキテクチャ」であり、「マルチホップ」アーキテクチャとも呼ばれます。

Medallion architecture
![medallion_architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/4a74f3c1-5771-1ed2-067a-e2a36344a0ff.png)

このアーキテクチャは、データが効率的な分析のために最適化されたレイアウトに格納される前に、複数の層の検証と変換を経て、ACID（原子性、一貫性、独立性、耐久性）を保証します。

レイヤー/ゾーンは常に同じ物理的なデータレイクに存在する必要はなく、別々のファイルシステム、ストレージアカウント、または異なるサブスクリプションに存在することもできます。例えば、異なるサブスクリプション内の複数のストレージアカウントは、ペタバイトスケールのデータレイクや、リクエストレートが20k /秒を超えるスループット要件を持つ場合には良いアイデアです。


# ランディング/ステージングゾーン（オプショナル）
ランディング/ステージングゾーンは、さまざまなソースから収集したデータを一時的に保管する場所であり、ブロンズレイヤーに転送する前の段階です。ソースシステムからのデータの取り込みでは、データは直接ローレイヤーにプッシュされるのではなく、2段階のプロセスに従います。

1. ランディングゾーンにデータをプッシュする。
1. 必要に応じて、暗号化や圧縮解除などを行った後、ランディングゾーンからブロンズゾーンにデータをプルする。

Landing/Staging Zone
![landingzone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/d4ef3045-38a7-9afc-0dda-6657a4474d97.png)

このレイヤーは、ソースシステムからの直接の取り込みをローレイヤーから分離し、特定の時間スケジュールまたは特定のイベント（例：3〜4ファイルが到着した場合にのみロード）に基づいてデータをローレイヤーにプルするための追加の制御を提供します。ソースシステムから送信された間欠的な障害または不正確なデータがある場合には、バッファを提供します。必要に応じて、ローレイヤーへの再処理を容易にします。

このレイヤーは、データレイクにデータを送る責任がソースシステムにある場合に重要な役割を果たします。例えば、外部クライアントが毎日/毎時データを送信したり、サードパーティのアプリケーションからRest APIを使ってデータを取得したり、データが暗号化されていてLakehouseのブロンズレイヤーに複合化して送信する必要がある場合などです。

ランディング/ステージングゾーンに格納されるデータには、通常、次のような主な特徴があります。

- 通常、このレイヤーには過去3〜7日間のデータが格納されます。ライフサイクル管理を使用して、3〜7日以上のデータの削除を自動化できます。
- これは、バッチ処理とストリーミング取り込みの両方に役立ちます。ストリーミング取り込みの例：キャプチャ機能を使用してデータをプッシュするイベントハブキャプチャは、日単位で時間単位のフォルダを作成します。このデータは定期的に「ブロンズ」レイヤーにプッシュされ、監査されます。
- CSV、JSON、XML、Parquet、mp3、jpg、zipなど、さまざまなファイル形式があります。

# ブロンズ (生データ) ゾーン
ブロンズ（生）レイヤーとは、外部ソースシステムからのデータをそのままの形で格納する場所です。このレイヤーのテーブル構造は、ソースシステムのテーブル構造と同じで、ロード日時やプロセスIDなどの付加的なメタデータ列も含まれます。このレイヤーでは、全データをロードする方法と、変更されたデータのみをロードする方法のどちらかを使ってデータを取得します。

Bronze (Raw) Zone
![bronze.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/b7b4d5c3-ac5f-ebec-832f-4fc4a4f599f7.png)

このレイヤーの主な目的は、ソースシステムの履歴アーカイブを提供することです。また、ソースシステムからデータを再読み込みすることなく、必要に応じて再処理するのにも役立ちます。

ブロンズレイヤーに格納されるデータには、通常、次のような主な特徴があります。

- 検証されていない不変のデータが含まれています。
- CSV、JSON、XML、Parquet、mp3、jpg、zipなど、さまざまなファイル形式で構造化、半構造化、または非構造化データが含まれています。
- YYYYMMDDまたは日時フォルダ構造を使用して、インターバルパーティションテーブルを使用して管理されます。
- 各データセットの完全な（未処理の）履歴を、ParquetやDeltaなどの効率的なストレージ形式で保持します。
- スキーマ情報、ソースファイル名、またはデータが処理された時間を記録するなどの追加のメタデータが含まれる場合があり、データの系譜に役立ちます。」

# シルバーゾーン (フィルタリング、クリーニング、および整合化されたデータ)
シルバーゾーンには、さらなる分析のために準備された検証済みおよびエンリッチされたデータが含まれています。このゾーンの組織は、ソースシステムによって単独で決定されるのではなく、主にビジネス上の考慮事項に影響を受けています。これにより、主要なビジネスエンティティ、コンセプト、およびトランザクション（例：マスター顧客、ストア、重複しないトランザクション、および相互参照テーブル）を包括する「エンタープライズビュー」が提供されます。通常、データは部門またはプロジェクトに基づいてフォルダに整理されます。

Silver (Filtered, Cleaned and Conformed data) Zone
![silver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/52e663b8-467d-6b40-21a3-562ef395ad11.png)

シルバーゾーンに格納されるデータには、通常、次のような主な特徴があります。

- DeltaまたはParquetなどの最適なストレージ形式でデータが含まれています。
- このレイヤーでの一般的なタスクには、スキーマとデータ型の定義、不要な列の削除、生データの重複削除、および検証と標準化のためのクリーニング（データ品質）ルールの適用、データセットから個人を特定できる情報（PII）の変更または削除などが含まれます。
- さらに、エンリッチメントプロセスには、データセットをマージして洞察の総合的な価値を高めることが含まれる場合があります。
- このレイヤーは、ゴールドレイヤーの企業および部門のデータプロジェクトを通じて、ビジネスユーザー、データエンジニア、およびデータサイエンティストがビジネス問題に答えるためのソースとして機能します。

# ゴールドゾーン(厳選されたビジネスレベルのテーブル)
レイクハウス内のゴールドレイヤーは、細心の注意を払ってキュレーションされたデータを、消費に適したプロジェクト/ドメイン/ユースケース固有のデータストアにフォーマットしています。シルバー、構造を持った高価値データ製品に変換され、データ消費者に提供されます。データサイエンスノートブックなど、そのまま提供されることも、別の読み取りデータストアを介して提供されることもあります。

この専門レイヤーは、レポート作成に専念し、非正規化された、読み取り最適化されたデータモデルを使用し、最小限の結合数で構成されています。

Gold (Curated business-level tables) Zone
![gold.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/76160db2-f784-d047-6140-db7557e3a9c8.png)

このレイヤーには、顧客分析、製品品質分析、在庫分析、顧客セグメンテーション、製品推奨、マーケティング/セールス分析など、プロジェクト/ドメイン/ユースケース固有のデータストアが含まれています。キンボール式のスタースキーマベースのデータモデルやインモン式のデータマートが、しばしばレイクハウスのゴールドレイヤーに統合されます。

ゴールドに格納されるデータは、通常、以下のような特徴を持ちます。

- ゴールドレイヤーのテーブルは、消費や特定のユースケースのために変換されたデータをカプセル化しています。
- レイクハウス内のすべてのテーブルは重要な目的を持っているべきですが、ゴールドテーブルは、単なる情報ではなく、知識に変換されたデータを表しています。
- 最適なストレージ形式、できればデルタでデータを格納しています。
- ゴールドレイヤーでは、複雑なビジネスルールが実装され、特定のユースケースに合わせて、多数の後処理、計算、濃縮、最適化などの処理が行われます。
- このレイヤーのデータは、高度に管理され、十分に文書化されています。

# サンドボックスゾーン (オプショナル)

Sandbox Zone
![sandbox.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/d44d20a2-8aa1-36f0-7081-6694b22f31cb.png)

サンドボックスゾーンとは、個人や小グループの協力者（高度な分析者やデータサイエンティスト）が、パターンや相関を探すための実験を行うための作業領域です。例えば、データサイエンスチームが新しい地域で最も効果的な商品配置戦略を特定することを目指しているとします。

このシナリオでは、彼らは顧客の人口統計や利用データなどの追加のエンティティを、その地域での類似の製品から統合することができます。このデータから得られる貴重な販売の洞察を活用して、チームは製品の市場適合性を評価し、最適な提供戦略を策定することができます。

サンドボックスゾーンに格納されるデータは、通常以下のような特徴を持ちます。
- サンドボックスゾーンは、実験と革新のための空間を提供し、データチーム内で継続的な改善と探求の文化を育成します。
- これらのポリシーは、利用可能なストレージの総量とデータを保持できる期間を制限します。
- ブロンズゾーンとシルバーゾーンは、サンドボックスゾーンへの入力を提供します。

# 各種ゾーンの比較
説明したさまざまなゾーンを比較した表を以下に示します。

![comparison.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/434191de-d9fe-9605-5bb6-693921fca923.png)

# リファレンス

[What is the medallion lakehouse architecture? — Azure Databricks | Microsoft Learn](https://learn.microsoft.com/en-us/azure/databricks/lakehouse/medallion)

[What is a Medallion Architecture? (databricks.com)](https://www.databricks.com/glossary/medallion-architecture)

　
<P>
このブログが、回復力のあるレイクハウスを構築するための基本的な概念と考慮事項の理解に役立ったと信じています。

それまでは…楽しく学んでください!!!

注意 — ここで表明されたすべての意見は私の個人的な見解であり、私の雇用主によるものではありません。
</p>

　
 
 <p>
その瞬間の思い――

夢とは寝ている間に見るものではなく、眠らせないものである — A.P.J アブドゥル・カラム博士
 </p>