Databricks

メダリオンアーキテクチャとは?Bronze/Silver/Gold設計パターン

2026-03-21
更新: 2026-03-27
NicheeLab編集部

Medallion Architecture(メダリオンアーキテクチャ)は、Databricks Lakehouse Platformで推奨されるデータ設計パターンです。 データをBronze(生データ)、Silver(クレンジング済み)、Gold(ビジネス最適化済み)の3層に分けて管理し、 データの品質・信頼性・利用効率を段階的に高めます。 Data Engineer Associate試験の最頻出アーキテクチャトピックです。

全体像

データソース(アプリケーション、IoT、外部API、ファイル)から到着した生データを、 まずBronze層にそのまま保存し、段階的にクレンジング・結合・集約を施してSilver、Goldへと昇華させます。 各層はすべてDelta Tableとして管理されます。

Data Sourcesアプリ / IoT / 外部API / ファイルBronze Layer生データをそのまま保存(Raw / Landing)Auto Loader / COPY INTOSilver Layerクレンジング・結合・型変換(Cleansed)MERGE / DLT / StreamingGold Layer集約・BI最適化・特徴量(Curated)バッチ集約 / Materialized ViewsBI / ML / API / Reportingダッシュボード・学習・API提供データソース → Bronze → Silver → Gold → BI/ML/API

Bronze層(生データ保存)

Bronze層の役割は「データソースから届いた生データを、変換せずにそのまま保存する」ことです。 データの品質は問わず、欠損・重複・型不整合があっても構いません。 目的は「何が届いたか」の完全な記録を残すことです。

  • データはそのままの形で保存(加工しない)
  • メタデータ(取り込み日時、ソースファイル名など)を追加
  • スキーマはソースに依存(推論 or 明示的定義)
  • 取り込みツール: Auto Loader、COPY INTO、Kafka Connector
  • データ品質: 低(NULLあり、重複あり、型不整合あり)
# 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層(クレンジング・結合)

Silver層は、Bronze層の生データを「ビジネスドメインに依存しない汎用的なクレンジング」で整えた層です。 NULLの処理、重複排除、型変換、テーブル間の結合(例: イベント + ユーザーマスタ)をここで行います。

  • 重複排除(deduplication)
  • 型変換(STRING → TIMESTAMP、DECIMAL変換など)
  • NULLの処理(フィルタリング or デフォルト値)
  • テーブル結合(Fact + Dimension)
  • データ品質チェック(DLT Expectations / CHECK制約)
  • ツール: MERGE INTO、Delta Live Tables、Structured Streaming + foreachBatch
# 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層(ビジネス最適化)

Gold層は、Silver層のデータを「特定のビジネスユースケースに最適化」した層です。 BIダッシュボード用のサマリテーブル、MLの特徴量テーブル、レポート用のワイドテーブルなどがここに置かれます。

  • 集約テーブル(日次/月次の売上サマリなど)
  • ワイドテーブル(非正規化して結合済みのテーブル)
  • ML特徴量テーブル(Feature Store用)
  • KPIテーブル(ダッシュボード直結)
-- 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;

各層の比較

比較軸BronzeSilverGold
目的生データの完全記録汎用クレンジングビジネス最適化
データ品質低(そのまま)中〜高(品質チェック済み)高(ビジネスルール適用済み)
主な読者データエンジニアデータエンジニア / アナリストアナリスト / BI / ML
更新頻度高(ソースと同期)中(定期バッチ or ストリーム)低〜中(日次バッチが多い)
取り込みツールAuto Loader / COPY INTOMERGE / DLT / StreamingバッチSQL / Materialized Views

Delta Live Tables(DLT)との関係

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")

試験で問われるポイント

  • Bronze / Silver / Gold 各層の役割と違い
  • 各層でのデータ品質の期待値
  • Bronze層の取り込みにはAuto Loaderが推奨される理由
  • Silver層での主な処理(重複排除、型変換、結合)
  • Gold層は「特定のユースケースに最適化」した層であること
  • DLTとMedallionの関係

問題で確認

Data Engineer Associate

問題 1

eコマースサイトの注文データをLakehouseに取り込む設計をしている。注文イベント(JSON)がS3に到着し、最終的にBIダッシュボードの日次売上サマリーとして利用したい。Medallion Architectureでの正しいデータフローはどれか。

  1. Auto Loaderで生JSONをBronze Deltaテーブルに取り込み → Silver層でクレンジング・顧客マスタとの結合 → Gold層で日次売上サマリーを集約
  2. JSONファイルを直接Gold層のサマリーテーブルにINSERTする
  3. Silver層にだけ取り込み、Bronze層とGold層は省略する
  4. Gold層でAuto Loaderを使ってJSONを取り込み、Silver層で集約する

正解: 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=ビジネスルール適用済み)が問われます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (109件)
© 2026 NicheeLab All rights reserved.