フィーチャ ビューを配信

フィーチャー ビューは、次の 2 つの方法でオンラインで提供できます。

  • モデルの提供: フィーチャー ビューでトレーニングされたモデルをデプロイします。 エンドポイントはモデルが記録された系譜を用いて、特徴値を自動的に検索または計算します。 これを使用して、モデル予測を提供します。
  • フィーチャー サービス: モデルを使用せずにフィーチャー ビューを直接参照する FeatureSpec を配置します。 エンドポイントは要求された特徴出力を返します。 これは、アプリケーションでモデル予測ではなく特徴値が必要な場合に使用します。

どちらのアプローチも、事前計算された機能とオンデマンド機能の両方をサポートしています。 テーブルベースおよびストリームベースのリーフ機能では、サポートされているオンライン マテリアライゼーションが必要です。 RequestSource リクエストから値を供給し、 CustomUDF オンデマンドで特徴を計算します。 FeatureViewSourceを持つCustomUDFでは、サービングは上流依存関係を解決し、特徴依存グラフを自動的に評価します。

要求された特徴と、それらすべての推移的上流特徴をUnity Catalogに登録します。 テーブルまたはストリームをバックエンドとするリーフのみをマテリアライズし、リクエスト時の特徴量や派生した CustomUDF 特徴量はマテリアライズしないでください。

Permissions

フィーチャを提供するには、モデル サービング エンドポイントを作成するプリンシパルに、マテリアライズド フィーチャの基になる Unity Catalog テーブルに対する SELECT 権限が必要です。 オンライン参照は具体化されたテーブルから直接読み取られます。そのため、テーブル レベルの SELECT は、サービスへのアクセスを許可します。 権限の説明については、 SELECTを参照してください。

具体化されたテーブルには複数の機能を保持できるため、そのテーブルに SELECT を付与すると、サービスを提供する予定のフィーチャだけでなく、そのテーブル内のすべての機能へのアクセスが許可されます。 サービスへのアクセス権を付与する前に、テーブルを共有するすべての機能をプリンシパルと共有できることを確認します。 露出を制限するには、機密性の高い特徴を個別に具体化します。

テーブルを手動で解決せずにこのアクセス権を付与するには、 FeatureEngineeringClient.grant_feature_serving_accessを使用します。 モデルまたは機能仕様を指定すると、各機能に対応するオンライン テーブルを特定し、それらのテーブルに対して SELECT(USE CATALOG および USE SCHEMA と併せて)を指定したプリンシパルに付与し、各テーブルと、その付与によってアクセス可能になる追加の機能をまとめたレポートを返します。 許可する前に、 dry_run=True を渡してレポートをプレビューします。

from databricks.feature_engineering import FeatureEngineeringClient

fe = FeatureEngineeringClient()

# Preview the tables and the features each grant would expose.
report = fe.grant_feature_serving_access(
    grant_to=["serving-principal@example.com"],
    model_uri="models:/main.ecommerce.fraud_model/1",
    dry_run=True,
)
print(report)

# Grant SELECT on the resolved online tables.
fe.grant_feature_serving_access(
    grant_to=["serving-principal@example.com"],
    model_uri="models:/main.ecommerce.fraud_model/1",
)

モデルサービスエンドポイントを配備する

既存のモデル サービス エンドポイントを使用するか、Databricks SDK を使用して新しいエンドポイントを作成します。 モデルは Unity カタログに登録する必要があります。

CustomUDFがユーザー定義関数(UDF)を使ってPythonパッケージをインポートする場合は、log_modelを呼び出す際に明示的にextra_pip_requirementsを通して渡してください。 カスタム UDF依存関係を参照してください。

次のコードは、エンドポイントを提供する新しいモデルを作成する方法を示しています。 詳細については、「 カスタム モデル サービス エンドポイントの作成」を参照してください。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput

w = WorkspaceClient()

endpoint_name = "fraud-detection-endpoint"
model_name = "main.ecommerce.fraud_model"

w.serving_endpoints.create(
    name=endpoint_name,
    config=EndpointCoreConfigInput(
        name=endpoint_name,
        served_entities=[
            ServedEntityInput(
                entity_name=model_name,
                entity_version=1,
                max_provisioned_concurrency=4,
                min_provisioned_concurrency=0,
            )
        ],
    ),
)

エンドポイントのクエリを実行する

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

response = w.serving_endpoints.query(
    name="fraud-detection-endpoint",
    dataframe_records=[
        {"user_id": "user_123", "transaction_time": "2026-03-01T12:00:00"},
    ],
)

RequestSource 機能を使用してエンドポイントにクエリを実行する

モデルが RequestSource 機能を使用してトレーニングされた場合、要求ペイロードには、すべての RequestSource 列も含める必要があります。 これらの列は、 log_model中に MLflow モデルシグネチャに追加されたので、エンドポイントの API スキーマに必要な要求フィールドが反映されます。

response = w.serving_endpoints.query(
    name="fraud-detection-endpoint",
    dataframe_records=[
        {
            "user_id": "user_123",
            "transaction_time": "2026-03-01T12:00:00",
            "transaction_amount": 275.30,  # RequestSource column
            "vendor_id": "v_42",           # RequestSource column (also used as entity key)
        },
    ],
)

エンティティ キーは、オンライン ストアからテーブルに基づく機能を検索するために使用されます。 ColumnSelection機能はRequestSource値をモデルに渡すことができます。 CustomUDF特徴はモデルが結果を使用する前にリクエスト入力を変換します。

curl を使用することもできます。

curl -X POST "https://<workspace>.cloud.databricks.com/serving-endpoints/<endpoint>/invocations" \
  -H "Authorization: Bearer $DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "dataframe_records": [
      {
        "user_id": "user_123",
        "transaction_time": "2026-03-01T12:00:00",
        "transaction_amount": 275.30,
        "vendor_id": "v_42"
      }
    ]
  }'

FeatureSpec を使用して機能を提供する

モデルなしでフィーチャー ビューを提供するには、フィーチャーを参照する FeatureSpec を作成し、フィーチャー サービス エンドポイントに配置します。 エンドポイントは仕様で要求された特徴出力のみを返します。中間値を自動で計算し、それらの特徴も要求しない限り返しません。

エンドポイントを作成する前に、すべての機能をUnity Catalogに登録し、テーブルとストリームバックのリーフに対応したオンラインマテリアライゼーションを作成してください。

Note

フィーチャー ビューを含む FeatureSpec には、 FeatureLookup 定義や FeatureFunction 定義を含めることはできません。 フィーチャー ビューを同じ FeatureSpec内の定義と混在させることはできません。

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

fe = FeatureEngineeringClient()

# 1. Retrieve a registered Feature View
agg_feature = fe.get_feature(full_name="main.ecommerce.amount_sum_sliding_7d_1d")

# 2. Create a FeatureSpec that includes the Feature View
feature_spec_name = "main.ecommerce.transaction_feature_spec"
fe.create_feature_spec(name=feature_spec_name, features=[agg_feature])

# 3. Deploy a Feature Serving endpoint backed by the FeatureSpec
fe.create_feature_serving_endpoint(
    name="transaction-features",
    config=EndpointCoreConfig(
        served_entities=ServedEntity(
            feature_spec_name=feature_spec_name,
            workload_size="Small",
            scale_to_zero_enabled=True,
        )
    ),
)

具体化された特徴を検索するために使用されるエンティティ キーを使用してエンドポイントにクエリを実行します。

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

response = w.serving_endpoints.query(
    name="transaction-features",
    dataframe_records=[{"user_id": "user_123"}],
)

フィーチャー サービング エンドポイントの詳細については、フィーチャー テーブルを配信するを参照してください。

CustomUDFの機能とその依存関係をサービス

この例は、 CustomUDF 例および FeatureViewSource 例で定義された取引およびマージンの特徴に対応しています。 これらのフィーチャービューAPIにはバージョン0.18.0以上 databricks-feature-engineering 使用してください。

  • log_transaction_amountNumPyを使ってリクエストのtransaction_amount値にmain.ecommerce.log_amount_udfを適用します。
  • margin FeatureViewSourceを用いてrevenue_sum_7dとcost_sum_7dのマージンを計算します。 これらの上流特徴はエンティティキーとして customer_id 、時系列列として event_time を使用します。

spec を作成する前に、2つの出力フィーチャーとすべての上流フィーチャーの両方を登録してください。この例では、revenue_sum_7d と cost_sum_7d のリーフだけをオンラインマテリアライズします。 Servingは各リクエストの値を検索し、 margin を計算します。

登録済みの Feature 物を取り出し、 create_feature_specに渡してください。 UDFの ENVIRONMENT 条項に既に記載されていても、NumPyをオンライン実行のために宣言してください:

from databricks.feature_engineering import FeatureEngineeringClient

fe = FeatureEngineeringClient()
log_transaction_amount = fe.get_feature(
    full_name="main.ecommerce.log_transaction_amount"
)
margin = fe.get_feature(full_name="main.ecommerce.margin")

fe.create_feature_spec(
    name="main.ecommerce.derived_transaction_features",
    features=[log_transaction_amount, margin],
    extra_pip_requirements=["numpy==1.26.4"],
)

上記のエンドポイント作成手順に従い、 feature_spec_name="main.ecommerce.derived_transaction_features" と derived-transaction-featuresのようなエンドポイント名を付けてください。 エンドポイントが準備完了したら、ルックアップキーとリクエスト時間値を入力します:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
response = w.serving_endpoints.query(
    name="derived-transaction-features",
    dataframe_records=[
        {"customer_id": "customer_123", "transaction_amount": 99.0},
    ],
)

応答には、中間収益やコストの値は含まれず、要求された log_transaction_amount および margin 出力のみが含まれます。 依存関係のフォーマット、ホイール権限、インストールのトラブルシューティングについては、「Add Python dependencies」を参照してください。