メインコンテンツまでスキップ

特徴量ビューのマテリアライズ

備考

プレビュー

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

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

Feature Views のサービングに関する情報については、「Serve Feature Views」を参照してください。

要件

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

権限

マテリアライゼーションは、特徴量に対するMANAGEおよびREAD FEATUREのUnity Catalog権限と連携します。完全な権限の説明については、READ FEATURE (特徴量の読み取り)を参照してください。

  • 特徴量のマテリアライズにはMANAGEが必要です。 materialize_featuresまたはdelete_materialized_featureを呼び出すと、バッキングのLakeflow Spark宣言型パイプラインとUnity Catalogテーブルが作成および管理されるため、管理操作です。特徴量に対してMANAGE、およびマテリアライズされる特徴量定義を読み取るためのREAD FEATUREが必要です。
  • **マテリアライズされたデータを読み取るには、READ FEATURE が必要です。** 特徴量に対するREAD FEATUREにより、その背後にあるオフラインテーブルとオンラインテーブルへのアクセスが付与されるため、マテリアライズされたデータをモデルのトレーニングとサービングに利用できます。list_materialized_featuresにはREAD FEATUREも必要です。

他のUnity Catalogオブジェクトと同様に、親カタログにUSE CATALOG、親スキーマにUSE SCHEMAも必要です。スキーマまたはカタログに付与されたREAD FEATUREおよびMANAGEは、それが含む現在および将来のすべての機能に適用されます。

APIデータ構造

OfflineStoreConfig

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

Python
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
)
Python
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テーブルが作成され、同じ名前でオンラインFeature Storeにテーブルがストリーム配信されます。

Python
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

マテリアライズされた Feature View、つまり Unity Catalog で事前計算された表現が利用可能な Feature View を表します。オフラインテーブルとオンラインテーブルには、個別のマテリアライズド特徴量があります。通常、ユーザーが MaterializedFeature を直接インスタンス化することはありません。

API関数呼び出し

materialize_features()

Feature Views のリストを、オフライン Delta テーブル、またはオンライン Feature Store のいずれかにマテリアライズします。この関数を呼び出す前に、特徴量は Unity Catalog に登録されている必要があります(たとえば、create_feature または register_feature を使用して)。登録されていないローカルで構築された特徴量は動作しません。

Python
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 Catalogテーブルに関するメタデータが含まれています。

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

trigger問題は、いつ実体化パイプラインを実行するかを制御します。

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

単一の materialize_features 呼び出しで、異なるトリガータイプを必要とする特徴量を混在させることはできません。代わりに、個別の呼び出しを実行してください。

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

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

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

注記

オンラインストアに集約機能を実装するには、オフラインストアにも集約機能を実装する必要があります。offline_configonline_configの両方が必要です。online_store_name既存のオンラインFeature Storeを参照する必要があります。 作成方法については、 Databricksオンライン機能ストアを参照してください。

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

Python
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 呼び出しでバッチ特徴量と混在させることはできません。

Python
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 Catalogメタストア内のすべての具体化された機能のリストを返します。

デフォルトでは、最大 100 個の機能が返されます。この制限は、 max_results問題を使用して変更できます。

返された具体化された機能を機能名でフィルタリングするには、オプションのfeature_name問題を使用します。

Python
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 の特徴量には集約ウィンドウがないため、データソースごとにのみグループ化されます。すべてのグループ化された特徴量が削除されるまで、マテリアライゼーションパイプライン、オフラインテーブル、オンラインテーブルは削除されません。グループ内の最後のマテリアル化された特徴が削除されると、Feature Store は、バックグラウンドプロセスによる自動クリーンアップのために、関連付けられたリソースをスケジュールします。バックグラウンドのリソースクリーンアップを参照してください。

マテリアライズドフィーチャーをクリーンアップするには、マテリアライズドフィーチャーに関連付けられているテーブルを参照してください。コンピュートおよびDeltaテーブル リソースがクリーンアップされる前に、テーブル内の各フィーチャ (列ごとに 1 つ) を削除する必要があります。

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

Python
FeatureEngineeringClient.delete_materialized_feature(
materialized_feature: MaterializedFeature, # Required: The materialized feature to delete
) -> None
Python
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特徴量はクエリ時にソースデータから直接取得されるため、オフラインでの具体化は不要です。

具現化挙動

  • このパイプラインは、集計ウィンドウを使用せずに、エンティティキーごとに最新の行をオンラインテーブルに書き込みます。
  • オンラインマテリアライゼーションは、エンティティキーごとに、オンラインテーブルに最新の値を入力します。

Python
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を使用します。オフライン使用ケース(トレーニングおよびバッチ推論)では、 ColumnSelection特徴がソースから直接読み込まれるため、 offline_configは必要ありません。

注記

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

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

マテリアライズド特徴を削除すると、Databricks は特徴量メタデータをすぐに削除します。関連付けられているインフラストラクチャ(テーブル、パイプライン、およびジョブ)は、バックグラウンドプロセスによって非同期でクリーンアップされます。

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

  • オフラインのDeltaテーブルには、マテリアライズされた特徴量データが格納されています。
  • 特徴がオンラインストアにマテリアライズされた場合のオンラインテーブル
  • マテリアライズ化パイプライン
  • オーケストレーション ジョブ

このバックグラウンドプロセスは、Databricks管理のシステムサービスプリンシパルを使用して、お客様に代わって、お客様のワークスペースにあるテーブル、パイプライン、およびジョブの削除などのクリーンアップアクションを実行します。対応は必要ありません。クリーンアップは Feature Store によってフルマネージド型で管理されます。

注記

グループ内で最後にマテリアライズされた特徴量を削除してから、関連するテーブルやその他のリソースが削除されるまでに、短い遅延が生じる場合があります。

制限事項

バッチ特徴量

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

ストリーミング特徴量

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