フィーチャ ビューを具体化する

Important

この機能は パブリック プレビュー段階です。 ワークスペース管理者は、[ プレビュー] ページからこの機能へのアクセスを制御できます。 Manage Azure Databricks プレビューを参照してください。

Unity カタログに格納されているフィーチャー ビュー定義を作成したら、機能定義を使用してソース テーブルからフィーチャ データを生成できます。 このプロセスは、特徴の具体化と呼ばれます。 Azure Databricks は、モデルのトレーニングとバッチ スコアリングまたはオンライン サービスのために Unity カタログのテーブルを設定するために、Lakeflow Spark 宣言パイプラインを作成および管理します。

フィーチャ ビューの提供の詳細については、「フィーチャ ビューを 提供する」を参照してください。

Requirements

  • フィーチャーはフィーチャー ビューとして作成し、Unity カタログに格納する必要があります。
  • バージョン要件については、「 要件」を参照してください。
  • ColumnSelection 機能は、オンライン ストアに具体化できます。 ColumnSelection の具体化を参照してください。
  • RequestSource 特徴は推論時に提供されるデータを表しているため、具体化できません。

Permissions

具体化は、機能に対する MANAGE および READ FEATURE Unity カタログ権限と対話します。 権限の完全な説明については、 READ FEATURE を参照してください。

  • フィーチャーを具体化するには、 MANAGEが必要です。 materialize_featuresまたはdelete_materialized_featureを呼び出すと、バッキング Lakeflow Spark 宣言パイプラインテーブルと Unity カタログ テーブルが作成および管理されるため、管理操作になります。 機能にはMANAGEが必要です。さらに、具体化される機能定義を読むにはREAD FEATUREも必要です。
  • 具体化されたデータを読み取るには、 READ FEATUREが必要です。 READ FEATURE 機能を使用すると、モデルのトレーニングと提供のために具体化されたデータを使用できるように、その機能をバックアップするオフライン テーブルとオンライン テーブルへのアクセスが許可されます。 list_materialized_features また、 READ FEATUREが必要です。

Unity Catalog オブジェクトと同様に、親カタログに USE CATALOG し、親スキーマに USE SCHEMA する必要もあります。 READ FEATUREMANAGE をスキーマまたはカタログに対して付与すると、その中に現在含まれるすべてのオブジェクトと今後含まれるすべてのオブジェクトに適用されます。

API データ構造

OfflineStoreConfig

具体化された機能が書き込まれるオフライン ストアの構成。 materialize_featuresが呼び出されると、このプレフィックスを使用してフィーチャ ストア バックエンドによってテーブルが作成されます。 各パイプライン実行では、具体化スケジュールに従って、最新の特徴値がテーブルに具体化されます。

OfflineStoreConfig(
    catalog_name: str,        # Catalog name for the offline table where materialized features will be stored
    schema_name: str,         # Schema name for the offline table
    table_name_prefix: str    # Table name prefix for the offline table. The pipeline may create multiple tables with this prefix, each updated at different cadences
)
from databricks.feature_engineering.entities import OfflineStoreConfig

offline_store = OfflineStoreConfig(
    catalog_name="main",
    schema_name="feature_store",
    table_name_prefix="customer_features"
)

OnlineStoreConfig

モデル サービスによって使用される機能を格納するオンライン ストアの構成。 具体化では、 catalog.schema.table_name_prefixを持つ Delta テーブルが作成され、同じ名前のオンライン フィーチャー ストアにテーブルがストリーム配信されます。

from databricks.feature_engineering.entities import OnlineStoreConfig

online_store = OnlineStoreConfig(
    catalog_name="main",
    schema_name="feature_store",
    table_name_prefix="customer_features_serving",
    online_store_name="customer_features_store"
)

MaterializedFeature

具体化されたフィーチャー ビュー、つまり Unity カタログで使用可能な事前計算済みの表現を表します。 オフライン テーブルとオンライン テーブルには、個別の具体化された機能があります。 通常、ユーザーは MaterializedFeature を直接インスタンス化しません。

API 関数呼び出し

materialize_features()

フィーチャ ビューのリストをオフラインの Delta テーブルまたはオンライン フィーチャ ストアに具体化します。 この関数を呼び出す前に、機能を Unity カタログに登録する必要があります (たとえば、 create_featureregister_featureを使用)。 登録されていないローカルで構築された機能は機能しません。

FeatureEngineeringClient.materialize_features(
    features: List[Feature],                                               # List of Feature Views to materialize
    offline_config: Optional[OfflineStoreConfig] = None,                   # Offline store config (aggregation features only)
    online_config: Optional[OnlineStoreConfig] = None,                     # Online store config
    trigger: Union[CronSchedule, TableTrigger, StreamingMode],              # Materialization trigger
) -> List[MaterializedFeature]:

このメソッドは、マテリアライズド機能の一覧を返します。このリストには、機能値が更新されるタイミングに関するメタデータと、特徴が具体化される Unity カタログ テーブルが含まれます。

OnlineStoreConfigOfflineStoreConfigの両方が指定されている場合は、提供された機能ごとに 2 つの具体化された特徴が返されます。1 つはストアの種類ごとに 1 つです。

trigger パラメーターは、具体化パイプラインを実行するタイミングを制御します。

  • CronSchedule: 固定スケジュールで実行されます。 バッチ集計機能 (AggregationFunction からDeltaTableSource) に必要です。
  • TableTrigger: アップストリームの Delta テーブルがコミットを受け取ったときに実行されます。 DeltaTableSource によってサポートされる ColumnSelection の機能に必要となります。
  • StreamingMode: 継続的ストリーミング パイプラインとして実行されます。 StreamSourceによってサポートされる機能に必要です。

1 回の materialize_features 呼び出しで異なるトリガーの種類を必要とする機能を混在することはできません。 代わりに個別の呼び出しを発行します。

オフライン ストアに具体化する

from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities import (
    CronSchedule, OfflineStoreConfig,
)

fe = FeatureEngineeringClient()

materialized = fe.materialize_features(
    features=features,
    offline_config=OfflineStoreConfig(
        catalog_name="main",
        schema_name="feature_store",
        table_name_prefix="customer_features"
    ),
    trigger=CronSchedule(
        quartz_cron_expression="0 0 * * * ?",  # Hourly
        timezone_id="UTC",
    ),
)

オンライン ストアに具体化する

Note

オンライン ストアに集計機能を具体化するには、オフライン ストアにも具体化する必要があります。 offline_configonline_configの両方が必要です。 online_store_nameは、既存のオンライン フィーチャ ストアを参照する必要があります。 作成手順については、「 Databricks Online Feature Stores」を参照してください。

ColumnSelection 機能には OfflineStoreConfigは必要ありません。 ColumnSelection の具体化を参照してください。

from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities import (
    CronSchedule, OfflineStoreConfig, OnlineStoreConfig,
)

fe = FeatureEngineeringClient()

materialized = fe.materialize_features(
    features=features,
    offline_config=OfflineStoreConfig(
        catalog_name="main",
        schema_name="feature_store",
        table_name_prefix="customer_features"
    ),
    online_config=OnlineStoreConfig(
        catalog_name="main",
        schema_name="feature_store",
        table_name_prefix="customer_features_serving",
        online_store_name="customer_features_store"
    ),
    trigger=CronSchedule(
        quartz_cron_expression="0 0 * * * ?",  # Hourly
        timezone_id="UTC",
    ),
)

ストリーミング機能を具体化する

ストリーミング機能は、オンライン ストアにのみ具体化できます。 offline_config パラメーターはサポートされていません。 ストリーミング機能では、サブ秒の鮮度を確保するためにリアルタイム パイプラインが必要であるため、オフライン具体化はサポートされていません。 オフライントレーニングまたは評価の場合、特徴エンジニアリング クライアントは、評価された各データ ポイントに基づいて特徴の値を再計算します。

ストリーミング機能は、同じ materialize_features 呼び出しのバッチ機能と混在させることはできません。

from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities import (
    OnlineStoreConfig, StreamingMode,
)

fe = FeatureEngineeringClient()

materialized = fe.materialize_features(
    features=[streaming_feature],
    online_config=OnlineStoreConfig(
        catalog_name="my_catalog",
        schema_name="my_schema",
        table_name_prefix="streaming_features_serving",
        online_store_name="feature_store_online"
    ),
    trigger=StreamingMode(),
)

list_materialized_features()

ユーザーの Unity カタログ メタストアのすべての具体化された機能の一覧を返します。

既定では、最大 100 個のフィーチャが返されます。 この制限は、 max_results パラメーターを使用して変更できます。

返された具体化された特徴を特徴名でフィルター処理するには、省略可能な feature_name パラメーターを使用します。

FeatureEngineeringClient.list_materialized_features(
    feature_name: Optional[str] = None,     # Optional feature name to filter by
    max_results: int = 100,                 # Maximum number of features to be returned
) -> List[MaterializedFeature]:

delete_materialized_feature()

具体化されたフィーチャーを削除する前に、フィーチャーを参照するモデルまたはフィーチャー スペックを削除または更新します。

具体化されたフィーチャーを削除します。 どの機能を渡すかは、機能の種類によって決まります。

  • 集計機能: オフラインマテリアライズド機能を渡します。 同じ機能に対してオンラインで具体化された機能がある場合、両方が削除されます。
  • ColumnSelection 機能: オンライン マテリアライズド機能を渡します。 ColumnSelection 機能はオンライン ストアにのみ具体化されるため ( ColumnSelection の具体化を参照)、ペアのオフライン機能はありません。

具体化の一環として、特徴は効率を高めるデータ ソースと集計ウィンドウごとにグループ化されます。 ColumnSelection 機能には集計ウィンドウがないため、データ ソースによってのみグループ化されます。 具体化パイプライン、オフライン テーブル、およびオンライン テーブルは、グループ化されたすべての機能が削除されるまで削除されません。 グループ内の最後の具体化されたフィーチャーが削除されると、機能ストアは、バックグラウンド プロセスによる自動クリーンアップのために関連するリソースをスケジュールします。 「バックグラウンド リソースのクリーンアップ」を参照してください。

具体化された機能をクリーンアップするには、その具体化された機能に関連付けられたテーブルを確認します。 コンピューティング テーブルリソースと Delta テーブル リソースがクリーンアップされる前に、テーブル内の各機能 (列ごとに 1 つ) を削除する必要があります。

list_materialized_features()を使用して、materialized_feature引数を取得します。

FeatureEngineeringClient.delete_materialized_feature(
    materialized_feature: MaterializedFeature,  # Required: The materialized feature to delete
) -> None
from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities import ColumnSelection

fe = FeatureEngineeringClient()

feature_names = [
    "main.feature_store.amount_sum_sliding_7d_1d",
    "main.feature_store.amount_sum_sliding_30d_1d",
    "main.feature_store.transaction_count_sliding_7d_1d",
    "main.feature_store.latest_transaction_amount",
    "main.feature_store.latest_user_tier",
]

for name in feature_names:
    feature = fe.get_feature(full_name=name)
    for mf in fe.list_materialized_features(feature_name=name):
        if isinstance(feature.function, ColumnSelection):
            # ColumnSelection features only have online materializations. Delete the online materialized feature directly.
            fe.delete_materialized_feature(materialized_feature=mf)
        elif not mf.is_online:
            # Aggregation features have both offline and online materializations. Delete the offline materialized feature to delete both.
            fe.delete_materialized_feature(materialized_feature=mf)
        # Online materialized aggregation features cannot be deleted directly. They are deleted via their paired offline materialized features.

ColumnSelection の具体化

ColumnSelection 機能は、集計なしでエンティティ キーごとに 1 つの列の最新の値を選択します。 これらは、オンライン ストアにのみ具体化できます。 オフラインユース ケース (トレーニングとバッチ推論) の場合、 ColumnSelection 機能はクエリ時にソース データから直接フェッチされるため、オフライン具体化は必要ありません。

具体化の動作

  • パイプラインは、エンティティ キーごとの最新の行を集計ウィンドウなしでオンライン テーブルに書き込みます。
  • オンラインマテリアライズにより、オンライン テーブルにエンティティ キーごとの現在の最新の値が設定されます。

from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities import (
    DeltaTableSource, Feature, ColumnSelection, TableTrigger, OnlineStoreConfig,
)

fe = FeatureEngineeringClient()

delta_source = DeltaTableSource(
    catalog_name="catalog",
    schema_name="schema",
    table_name="transactions",
)

amount_feature = Feature(
    source=delta_source,
    function=ColumnSelection("amount"),
    entity=["user_id"],
    timeseries_column="transaction_time",
    name="latest_transaction_amount",
)

# Register before materializing
amount_feature = fe.register_feature(
    feature=amount_feature,
    catalog_name="catalog",
    schema_name="schema",
)

mfs = fe.materialize_features(
    features=[amount_feature],
    online_config=OnlineStoreConfig(
        catalog_name="catalog",
        schema_name="feats_online",
        table_name_prefix="txn_",
        online_store_name="lb_usw2"
    ),
    trigger=TableTrigger(),
)

ColumnSelection 機能は、ソース Delta テーブルが新しいコミットを受信するたびにパイプラインを実行する TableTriggerを使用します。 offline_config機能はオフライン ユース ケース (トレーニングとバッチ推論) のためにソースから直接読み取われるため、ColumnSelectionは必要ありません。

Note

RequestSource 特徴は、推論時に呼び出し元によって提供されたデータ (またはトレーニング時にラベル付けされた DataFrame から抽出される) を表しているため、具体化できません。 読み取り元のソース テーブルがありません。 値は、要求ペイロードまたはトレーニング DataFrame にのみ存在します。

バックグラウンド リソースのクリーンアップ

具体化されたフィーチャーを削除すると、Databricks は機能メタデータを直ちに削除します。 関連付けられているインフラストラクチャ (テーブル、パイプライン、ジョブ) は、バックグラウンド プロセスによって非同期的にクリーンアップされます。

複数の具体化されたフィーチャーが同じテーブルとパイプラインを共有できるため、これらの共有リソースは、それらを参照するすべての具体化されたフィーチャーが削除されるまで削除されません。 テーブルのセットを共有する最後の具体化された機能が削除されると、バックグラウンド プロセスによって次のリソースが自動的に削除されます。

  • 具体化された特徴データを含むオフラインの Delta テーブル
  • オンライン テーブル (機能がオンライン ストアに具体化された場合)
  • マテリアライズ パイプライン
  • オーケストレーションジョブ

このバックグラウンド プロセスでは、Databricks で管理されるシステム サービス プリンシパルを使用して、ワークスペース内のテーブル、パイプライン、ジョブの削除など、これらのクリーンアップ アクションをユーザーに代わって実行します。 ユーザーからの操作は必要ありません。 クリーンアップは、機能ストアによって完全に管理されます。

Note

グループ内の最後の具体化されたフィーチャーを削除してから、関連付けられているテーブルやその他のリソースを削除するまでに、少し時間がかかる場合があります。

制限事項

バッチ機能

  • バッチ マテリアライズ パイプラインは、サーバーレスの Lakeflow Spark Declarative Pipelines パイプラインとして実行されます。
  • バッチ ローリング ウィンドウの機能を実体化することはできません。 時間の正確さの忠実度が高いため、オフライン トレーニングまたはバッチ推論のローリング ウィンドウ機能は、データ ポイントごとにその場で生成されます。
  • ColumnSelection 機能は、オンライン ストアにのみ具体化できます。
  • RequestSource 機能を具体化できません。
  • 具体化された機能は、作成されたワークスペースでのみ削除できます。
  • 具体化された集計機能の場合、オンラインマテリアライズドフィーチャーを直接削除することはできません。 ペアになったオフラインマテリアライズドフィーチャーを削除すると、変更が両方に反映されます。
  • 2026 年 4 月 20 日より前に作成された具体化された集計機能の場合、具体化パイプラインでは、パイプライン内のすべての具体化された特徴が削除されるまで新しい特徴値の生成が続行され、リソースのクリーンアップがトリガーされます。 機能ごとの削除をサポートする更新されたパイプラインを作成するには、機能を削除して再具体化します。
  • 具体化された ColumnSelection 機能の場合、具体化パイプラインは、パイプライン内のすべての具体化された特徴が削除されるまで新しい機能値の生成を続け、リソースのクリーンアップをトリガーします。

ストリーミング機能

  • ストリーミング機能は、オンライン ストアにのみ具体化できます。 トレーニング時のストリーミング機能は、ミリ秒レベルの精度を提供するために、データ ポイントごとの履歴イベントから再計算されるように設計されているため、オフライン具体化は必要ありません。
  • ストリーミング機能は、1 回の materialize_features 呼び出しでバッチ機能と混在させることはできません。
  • compute_features はストリーミング機能をサポートしていません。
  • ワークスペースは、Lakebase インスタンスをサポートするリージョンに存在する必要があります。
  • JSON でシリアル化された Kafka メッセージのみがサポートされます。 メッセージ スキーマは、JSON スキーマ形式で直接指定する必要があります。 スキーマ レジストリ (Confluent、Glue) は、プレビュー期間中は正式にはサポートされていませんが、スキーマを直接指定すると、パイプラインはスキーマ レジストリによって管理されるトピックから読み取ることができます。
  • ストリーミング集計機能では、 RollingWindow のみがサポートされています。 TumblingWindowSlidingWindow をバッチ機能と共に使用する必要があります。
  • ストリーミング機能では、 CountAvgSumStddevPopMaxMin、および Last 集計関数のみがサポートされます。
  • ストリーミング ソースからの列選択機能では、順序が異なったメッセージは処理されません。 時系列列の値が以前に受信したイベントよりも前の場合でも、Kafka ストリームの最新のイベントが表示されます。
  • ストリーミング パイプラインは週に 2 回再起動されます。 再起動するたびに、処理の遅延と起動時間が最大 1 分発生する可能性があります。 再起動を除き、p99 の鮮度は 200 ミリ秒です。
  • マテリアライズに対するバックフィル機能はサポートされていません。 フィーチャーがマテリアライズされると、その時点以降について計算されます。 オンライン ストアで新しく作成された集計は、時間枠が過ぎるまで不正確です。
  • Databricks Online Feature Store のみがサポートされています。
  • 独自のクラウド オブジェクト ストレージで作成された Unity カタログの標準カタログのみがサポートされます。 既定のストレージに作成されたカタログは使用できません。
  • ストリーミング マテリアライズ パイプラインは、サーバーレスの Lakeflow Spark Declarative Pipelines のパイプライン上で実行されます。
  • エンタープライズ層ワークスペースのみ。