Medallion Architecture(メダリオンアーキテクチャ)は、Databricks Lakehouse Platformで推奨されるデータ設計パターンです。 データをBronze(生データ)、Silver(クレンジング済み)、Gold(ビジネス最適化済み)の3層に分けて管理し、 データの品質・信頼性・利用効率を段階的に高めます。 Data Engineer Associate試験の最頻出アーキテクチャトピックです。
データソース(アプリケーション、IoT、外部API、ファイル)から到着した生データを、 まずBronze層にそのまま保存し、段階的にクレンジング・結合・集約を施してSilver、Goldへと昇華させます。 各層はすべてDelta Tableとして管理されます。
Bronze層の役割は「データソースから届いた生データを、変換せずにそのまま保存する」ことです。 データの品質は問わず、欠損・重複・型不整合があっても構いません。 目的は「何が届いたか」の完全な記録を残すことです。
# Bronze層への取り込み(Auto Loader)
(spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaLocation", "/checkpoint/bronze/schema")
.load("/data/landing/events/")
.withColumn("_ingested_at", current_timestamp())
.withColumn("_source_file", input_file_name())
.writeStream
.option("checkpointLocation", "/checkpoint/bronze/events")
.trigger(availableNow=True)
.toTable("bronze.raw_events")
)Silver層は、Bronze層の生データを「ビジネスドメインに依存しない汎用的なクレンジング」で整えた層です。 NULLの処理、重複排除、型変換、テーブル間の結合(例: イベント + ユーザーマスタ)をここで行います。
# Silver層への変換(MERGE)
MERGE INTO silver.customers t
USING (
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY updated_at DESC) AS rn
FROM bronze.raw_customers
WHERE _ingested_at > current_timestamp() - INTERVAL 1 HOUR
QUALIFY rn = 1
) s
ON t.customer_id = s.customer_id
WHEN MATCHED AND s.updated_at > t.updated_at THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;Gold層は、Silver層のデータを「特定のビジネスユースケースに最適化」した層です。 BIダッシュボード用のサマリテーブル、MLの特徴量テーブル、レポート用のワイドテーブルなどがここに置かれます。
-- Gold層の集約テーブル
CREATE OR REPLACE TABLE gold.daily_sales_summary AS
SELECT
date_trunc('day', order_date) AS sale_date,
region,
product_category,
COUNT(*) AS order_count,
SUM(amount) AS total_amount,
AVG(amount) AS avg_amount
FROM silver.orders o
JOIN silver.customers c ON o.customer_id = c.customer_id
GROUP BY 1, 2, 3;| 比較軸 | Bronze | Silver | Gold |
|---|---|---|---|
| 目的 | 生データの完全記録 | 汎用クレンジング | ビジネス最適化 |
| データ品質 | 低(そのまま) | 中〜高(品質チェック済み) | 高(ビジネスルール適用済み) |
| 主な読者 | データエンジニア | データエンジニア / アナリスト | アナリスト / BI / ML |
| 更新頻度 | 高(ソースと同期) | 中(定期バッチ or ストリーム) | 低〜中(日次バッチが多い) |
| 取り込みツール | Auto Loader / COPY INTO | MERGE / DLT / Streaming | バッチSQL / Materialized Views |
Delta Live Tables(DLT)は、Medallion Architectureを宣言的に実装するためのDatabricksの機能です。 各層のテーブルを @dlt.table デコレータで定義し、層間の依存関係をDLTが自動管理します。 データ品質チェック(Expectations)も組み込めるため、Silver層の品質保証が簡潔に書けます。
import dlt
from pyspark.sql.functions import *
@dlt.table(comment="Bronze: raw events")
def bronze_events():
return (spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.load("/data/landing/")
)
@dlt.table(comment="Silver: cleaned events")
@dlt.expect_or_drop("valid_amount", "amount > 0")
def silver_events():
return dlt.read_stream("bronze_events").filter("event_type IS NOT NULL")Data Engineer Associate
問題 1
eコマースサイトの注文データをLakehouseに取り込む設計をしている。注文イベント(JSON)がS3に到着し、最終的にBIダッシュボードの日次売上サマリーとして利用したい。Medallion Architectureでの正しいデータフローはどれか。
正解: A
Medallion Architectureでは、生データをまずBronzeにそのまま保存し、Silverでクレンジング・結合、Goldでビジネス最適化(集約)するのが正しいフローです。Bronzeを飛ばすと生データの復元ができず、Gold層でAuto Loaderを使うのは層の役割が逆転しています。
Medallion Architectureは必ずBronze/Silver/Goldの3層にしないといけませんか?
いいえ。3層は最も一般的なパターンですが、組織の要件に応じて2層(Raw + Curated)にしたり、4層以上に拡張したりすることもあります。重要なのは「生データをそのまま保存する層」と「ビジネスロジックを適用した層」を分離する設計思想です。Databricksの公式ドキュメントでもBronze/Silver/Goldは推奨パターンであり、厳格な規定ではないと説明されています。
Silver層とGold層の違いが曖昧です。どう区別しますか?
Silver層は「ビジネスドメインに依存しない汎用的なクレンジング・結合」を行う層です。NULLの除去、型変換、重複排除、テーブル結合などが該当します。Gold層は「特定のビジネス要件やユースケースに最適化した集約・加工」を行う層です。BI用のサマリテーブル、MLの特徴量テーブル、レポート用のワイドテーブルなどが該当します。Silver層は汎用、Gold層は用途特化、と覚えると区別しやすいです。
試験でMedallion Architectureはどう出題されますか?
Data Engineer Associateで最頻出のアーキテクチャ問題です。各層の役割(Bronze=生データ保存、Silver=クレンジング・結合、Gold=集約・BI最適化)、各層で使う技術(Bronze=Auto Loader、Silver=MERGE/DLT、Gold=バッチ集約/MV)、データ品質がどの層で保証されるか(Bronze=低品質OK、Silver=品質チェック済み、Gold=ビジネスルール適用済み)が問われます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...