メダリオンアーキテクチャとは、Databricksが提唱するデータレイクハウスの設計パターンで、Bronze(生データ)・Silver(クレンジング済み)・Gold(ビジネス用)の3層でデータ品質を段階的に向上させる考え方です。本記事では各層の設計指針とコード例、3層構造(Raw / Staging / Mart)との対応関係、そしてアンチパターンまでを解説します。

メダリオンアーキテクチャとは

メダリオンアーキテクチャは、Databricksが自社のレイクハウス設計で広めた概念で、メダル(金銀銅)になぞらえた3層構造を特徴とします。Bronze層にソースの原形を格納し、Silver層でクレンジングと整形を行い、Gold層でビジネスロジックを適用する――この段階的な品質向上が基本思想です。

発祥はDatabricksですが、概念自体はクラウドDWH(BigQuery、Snowflake)でも適用可能です。dbtコミュニティの「3層構造(Raw / Staging / Mart)」と本質的に同じ思想であり、呼び方が違うだけと考えて差し支えありません。

Bronze層の設計

Bronze層の役割は「生データを忠実に保存すること」です。ソースシステムから受け取ったデータをそのままの形で保持し、将来の再処理や監査に備えます。変換・集計・結合は行いません。ここで気を付けるべきはスキーマ進化への対応で、Delta Lakeの場合はschema evolutionを有効化して後方互換性を確保します。

以下はDelta LakeでBronzeテーブルを作成する例です。

CREATE TABLE bronze.orders (
    id STRING,
    amount STRING,
    created_at STRING,
    _ingested_at TIMESTAMP,
    _source_file STRING
) USING DELTA
PARTITIONED BY (DATE(_ingested_at))
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true');

Silver層の設計

Silver層はBronzeを受けて、クレンジング・正規化・ビジネスキーの付与を行います。型変換、NULLハンドリング、重複除去、軽いJOINによるエンリッチメントといった処理を施し、「整った元テーブル」を準備します。ここまで到達したデータは、分析利用者が安心して触れるベースラインとなります。

BronzeからSilverへの変換例をSQLで示します。

CREATE OR REPLACE TABLE silver.orders AS
SELECT
    id AS order_id,
    CAST(amount AS DOUBLE) AS amount,
    CAST(created_at AS TIMESTAMP) AS created_at,
    _ingested_at
FROM bronze.orders
WHERE id IS NOT NULL
  AND amount IS NOT NULL;

Gold層の設計

Gold層は分析・BI・業務還流で利用する最終形です。ビジネスロジックの適用、KPI計算、ファクト/ディメンション構築、集計マートの作成など、ビジネス文脈に即したテーブルを用意します。ドメイン別にフォルダを分け、テーブル数が爆発しないよう統治することが重要です。

CREATE OR REPLACE TABLE gold.daily_sales AS
SELECT
    DATE(created_at) AS sale_date,
    COUNT(*) AS order_count,
    SUM(amount) AS total_amount,
    AVG(amount) AS avg_amount
FROM silver.orders
GROUP BY DATE(created_at);

3層の設計ルール

メダリオンアーキテクチャ全体を一枚の図で俯瞰すると次のようになります。

【メダリオンアーキテクチャ全体図】

  [Source Systems]
         |
         v
  [Bronze層]
    - 原形保存、スキーマ進化対応
    - パーティショニング
         |
         v
  [Silver層]
    - 型変換、NULL処理、重複除去
    - ビジネスキー付与
    - 軽いJOINでエンリッチメント
         |
         v
  [Gold層]
    - KPI計算、集計
    - ファクト / ディメンション
    - 分析 / BI / 業務還流
         |
         v
  [BI / Dashboard / Business SaaS]

各層の設計ルールを表にまとめました。

観点BronzeSilverGold
データ品質保証なし型とNULLを整備ビジネス品質
変換内容なしクレンジング・軽JOIN集計・KPI・ロジック
アクセス制御限定的データチーム分析者・全社員
保持期間長期(再処理用)中期短〜中期(再計算可能)
テスト密度取り込み完了確認型・NULL・ユニークビジネスルール検証
更新頻度取り込みごと日次〜時次日次
ストレージ形式Delta LakeDelta LakeDelta Lake / 集計テーブル

dbtの3層構造との対応は次の通りです。

メダリオンdbt 3層構造役割
BronzeRaw原形保存
SilverStaging / Intermediateクレンジング・共通ロジック
GoldMart分析用・ビジネス

メダリオンアーキテクチャの注意点

メダリオンは万能ではなく、採用時に気をつけるべき落とし穴があります。第一に「層の増やしすぎ」です。Silver1→Silver2→Silver3と枝分かれが進むと、どこを参照すべきか誰も分からなくなります。必要に応じてIntermediate的な中間層を設ける程度に留めましょう。

第二に「Silverスキップ問題」で、Bronzeから直接Goldを作ろうとするアンチパターンです。確かに手早く結果は出ますが、後からSilver層を挿入するのは非常に困難で、結局全部書き直すはめになります。

第三に「メンテナンスコスト」で、層が増えるほど実行時間とストレージ費用が積み重なります。Bronze層の保持期間を長くしすぎない、Goldは必要に応じてマテリアライズする、といった運用ルールで費用をコントロールしてください。

まとめ

メダリオンアーキテクチャは、データの品質段階を明確に意識させる優れた設計パターンです。Databricks環境だけでなく、SnowflakeやBigQueryでも同じ思想を取り入れられます。dbtの3層構造と併せて理解することで、チーム内での共通言語を確立し、保守性の高いデータ基盤を構築できるでしょう。

よくある質問

メダリオンアーキテクチャはDatabricks専用ですか?

いいえ。Databricksが提唱しましたが、概念自体はクラウドDWH(BigQuery、Snowflake)でも適用可能です。dbtの3層構造と本質的に同じ考え方です。ツール選定と設計思想は切り離して考えましょう。

Bronze/Silver/Goldの3層は必須ですか?

規模に応じて2層(Raw / Mart)にすることも可能です。ただし中規模以上ではSilver層が品質ゲートとして重要な役割を果たします。最初は3層で設計し、必要に応じて簡略化するのが安全です。

各層にどのようなテストを設定すべきですか?

Bronze層は取り込み完了の確認、Silver層は型チェック・NULL制約・ユニーク制約、Gold層はビジネスルール検証が基本です。層が進むほどテストを厳密にします。dbt testsやElementaryで自動化するのが定石です。