Databricks

Databricks Feature Serving入門: オンライン推論・特徴量配信・Online Table設定

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

MLモデルをオンラインで推論する際、学習時と同じ特徴量を低遅延で取得する仕組みが必要です。 DatabricksのFeature Servingは、Unity Catalog上のFeature Storeテーブルを専用エンドポイント経由で配信し、 Training-Serving一貫性(学習時と推論時で同じ特徴量定義を使う)を実現します。 本稿ではFeature Servingの仕組み、Online Table設定、エンドポイント作成、一貫性の確保方法を解説します。

なぜFeature Servingが必要か

バッチ推論ではDeltaテーブルから直接特徴量を読み取れますが、オンライン推論(リアルタイムAPIリクエスト)では Deltaテーブルへのクエリはレイテンシが高すぎます(秒〜数十秒)。Feature Servingは以下の課題を解決します。

課題バッチ推論オンライン推論(Feature Serving)
レイテンシ要件秒〜分(許容可能)ミリ秒〜数十ミリ秒(低遅延必須)
特徴量の取得元Deltaテーブルから直接SELECTOnline Table(KVストア)経由
Training-Serving一貫性同じテーブルを読むため自然に一致Feature Storeを共通定義にすることで保証
スケーラビリティクラスターの計算能力に依存エンドポイントの自動スケーリング

Feature Servingのアーキテクチャ

[Training]
  │  Feature Engineering in UC
  │  fe.create_training_set(
  │      entity_df, feature_lookups=[...])
  │  → 学習時に特徴量をルックアップ
  v
[Feature Table (Delta, UC)]
  │  ソーステーブル
  │  ├─ customer_features (customer_id, avg_spend, ...)
  │  └─ product_features  (product_id, category, ...)
  v
[Online Table]
  │  Deltaからの差分同期 (Snapshot / Triggered / Continuous)
  │  → 低遅延KVストアに変換
  v
[Feature Serving Endpoint]
  │  REST API (POST /serving-endpoints/{name}/invocations)
  │  → customer_id をキーに特徴量ベクトルを返却
  v
[Model Serving / Application]
  │  特徴量 + リアルタイム入力 → 推論結果

Online Tableの設定

Online TableはDeltaテーブルを低遅延のKVストアに同期する仕組みです。 ソースとなるDeltaテーブル(Feature Table)とプライマリキーを指定して作成します。

-- Online Tableの作成(SQL)
CREATE ONLINE TABLE ml.features.customer_features_online
SOURCE ml.features.customer_features
PRIMARY KEY (customer_id)
SYNC MODE TRIGGERED;
同期モード動作レイテンシコスト
SNAPSHOT全データを定期的にスナップショット同期間隔に依存(分〜時間)
TRIGGERED手動トリガーでCDC差分同期トリガー実行時に更新
CONTINUOUSストリーミングで常時差分同期秒〜分のニアリアルタイム高(常時稼働)

プライマリキーはFeature Tableのルックアップキーと一致させます。 複合キーも指定可能です(例: PRIMARY KEY (customer_id, product_id))。

Feature Serving Endpointの作成

Python SDK(databricks-feature-engineering)を使ってFeature Serving Endpointを作成します。

from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities.feature_serving_endpoint import (
    EndpointCoreConfig,
    ServedEntity,
)

fe = FeatureEngineeringClient()

fe.create_feature_serving_endpoint(
    name="customer-features-endpoint",
    config=EndpointCoreConfig(
        served_entities=ServedEntity(
            feature_table_name="ml.features.customer_features",
            scale_to_zero_enabled=True,
        )
    )
)

scale_to_zero_enabledをTrueにすると、リクエストがない期間はエンドポイントがスケールダウンしてコストを抑えます。 ただしコールドスタート時にレイテンシが増加するため、SLAが厳しい場合はFalseにして常時稼働させます。

エンドポイントへのリクエスト

import requests
import json

endpoint_url = "https://<workspace-url>/serving-endpoints/customer-features-endpoint/invocations"
headers = {"Authorization": "Bearer <token>", "Content-Type": "application/json"}

payload = {
    "dataframe_records": [
        {"customer_id": "C001"},
        {"customer_id": "C002"}
    ]
}

response = requests.post(endpoint_url, headers=headers, json=payload)
features = response.json()
# => {"dataframe_records": [
#   {"customer_id": "C001", "avg_spend": 150.5, "total_orders": 42, ...},
#   {"customer_id": "C002", "avg_spend": 89.2, "total_orders": 15, ...}
# ]}

Training-Serving一貫性の実現

Training-Serving Skew(学習時と推論時で特徴量の定義や計算方法が異なる問題)は、MLシステムの信頼性を損なう最大の落とし穴です。 DatabricksのFeature Engineering in Unity Catalogは以下の仕組みでこの問題を構造的に解消します。

  • 単一の特徴量定義: UC上のFeature Tableがバッチ学習とオンライン推論の両方のソースになる
  • FeatureLookup: 学習データセット作成時にcreate_training_setで特徴量をルックアップし、推論時も同じテーブルから取得
  • モデルのリネージ: MLflowにログされたモデルには、使用した特徴量テーブルとバージョンが記録される
from databricks.feature_engineering import FeatureEngineeringClient, FeatureLookup

fe = FeatureEngineeringClient()

training_set = fe.create_training_set(
    df=labels_df,  # ラベルデータ (customer_id, label)
    feature_lookups=[
        FeatureLookup(
            table_name="ml.features.customer_features",
            lookup_key=["customer_id"],
        ),
        FeatureLookup(
            table_name="ml.features.product_features",
            lookup_key=["product_id"],
        ),
    ],
    label="label",
)

training_df = training_set.load_df()

# モデルのログ(特徴量リネージが自動記録される)
fe.log_model(
    model=trained_model,
    artifact_path="model",
    flavor=mlflow.sklearn,
    training_set=training_set,
    registered_model_name="ml.models.recommendation_model",
)

fe.log_modelでログされたモデルには特徴量テーブルの参照が埋め込まれます。 このモデルをModel Servingにデプロイすると、推論リクエスト時にFeature Serving経由で自動的に特徴量がルックアップされます(Feature Function)。

設計上の考慮事項

検討項目推奨理由
プライマリキー設計エンティティの自然キー(customer_id等)ルックアップの一意性を保証
特徴量テーブルの粒度エンティティ単位で1テーブルテーブルが肥大化するとOnline Tableの同期コスト増大
特徴量の鮮度要件ユースケースに応じてOnline Table同期モードを選択リアルタイム推薦→Continuous、日次バッチ→Snapshot
高カーディナリティの特徴量前処理でバケット化・カテゴリ化Online Tableの行数・サイズを抑制
エンドポイントのスケーリングQPS要件に応じてscale_to_zeroの有無を決定低QPS→scale_to_zero、高QPS→常時稼働

Feature Servingの監視

  • エンドポイントのレイテンシ: P50/P99をモニタリングし、SLA(例: P99 < 100ms)を設定
  • Online Tableの同期遅延: ソースDeltaの最終更新からOnline Tableへの反映までの時間差を監視
  • 特徴量ドリフト: Lakehouse Monitorをソースの特徴量テーブルに設定し、分布変化を検出
  • エンドポイントのエラー率: 4xx/5xxの割合を監視し、キー不一致やスキーマ変更を検出

問題で確認

ML Associate / ML Professional

問題 1

MLエンジニアがオンライン推薦システムを構築している。学習時にはDeltaテーブルから顧客特徴量をルックアップしてモデルを学習した。推論時にも同じ特徴量を低遅延で取得し、学習時と推論時の特徴量定義を一致させたい。最も適切なアプローチはどれか。

  1. Feature Engineering in UCでFeature Tableを定義し、Online Tableで低遅延KVストアに同期し、Feature Serving Endpointで配信する
  2. 推論時にDeltaテーブルに直接SQLクエリを発行して特徴量を取得する
  3. 学習時の特徴量をCSVにエクスポートし、推論アプリケーション内にハードコードする
  4. 推論時にはMLflowのモデルアーティファクトから特徴量を復元する

正解: A

Feature Engineering in UCで特徴量テーブルを一元管理し、Online Tableで低遅延のKVストアに同期、Feature Serving Endpointで配信することで、Training-Serving一貫性と低遅延を両立できます。Deltaへの直接クエリは低遅延要件を満たしません。CSVエクスポートは特徴量の更新追従ができません。MLflowのモデルアーティファクトにはモデルのパラメータが含まれますが特徴量データそのものは含まれません。

よくある質問

Feature ServingとModel Servingの違いは何ですか?

Model ServingはMLモデル自体をエンドポイントとしてデプロイし、入力データを受け取って推論結果を返します。Feature Servingは特徴量テーブルから特定キーの特徴量ベクトルを低遅延で取得するエンドポイントです。典型的な構成では、クライアントがまずFeature Servingで特徴量を取得し、その特徴量をModel Servingに渡して推論する、という2段階のリクエストになります。Feature Functionを使えば、Model Serving内で自動的に特徴量をルックアップする一体化も可能です。

Online Tableの更新頻度はどのくらいですか?

Online Tableの同期モードは3種類あります。(1) Snapshot: 手動またはスケジュールでソースDeltaテーブル全体をスナップショット同期。(2) Triggered: 手動トリガーでCDC(変更データキャプチャ)を使った差分同期。(3) Continuous: ストリーミングで常時差分同期(最も低遅延だがコスト大)。ユースケースに応じて頻度とコストのバランスで選択します。

Feature Storeで管理していない特徴量もFeature Servingで配信できますか?

Feature Servingのエンドポイントは、Unity Catalog上のFeature Storeテーブル(Feature Engineering in Unity Catalog)から配信します。Feature Storeに登録されていないテーブルを直接Feature Servingで配信することはできません。ただし、任意のDeltaテーブルをFeature Store(UC上のFeatureテーブル)として登録することは簡単にでき、CREATE FEATURE TABLE文またはPython APIで登録できます。

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

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の記事一覧 (105件)
© 2026 NicheeLab All rights reserved.