次の方法で共有


オンライン ストアに特徴を公開する

この記事では、リアルタイム サービスを提供するためにオンライン ストアに特徴を公開する方法について説明します。

Databricks Feature Store は、これらのオンライン ストアをサポートしています。

オンライン ストア プロバイダー Unity Catalog の特徴エンジニアリングを使用して公開 ワークスペース Feature Store を使用して公開 レガシ MLflow モデル提供での特徴量検索 モデル提供での特徴量検索
Azure Cosmos DB [1] x X (Feature Store クライアント v0.5.0 以降) x X
Azure MySQL (単一サーバー) X X
Azure SQL Server X

Cosmos DB の互換性に関する注意事項

このセクションには、Cosmos DB で Databricks Feature Store を使用する場合に注意すべき重要な点がいくつか含まれています。

Unity Catalog 対応ワークスペース

Databricks Runtime 12.2 LTS ML 以降では、Cosmos DB オンライン ストア プロバイダーは Unity Catalog 対応ワークスペースと互換性がありません。 Unity Catalog と公式の Cosmos DB Spark コネクタの両方によって Spark カタログが変更されます。 Databricks Runtime 12.2 LTS ML 以下を実行しているクラスター上の Unity カタログ対応ワークスペースから Cosmos DB に機能を発行すると、Cosmos DB への Feature Store の発行が失敗する書き込み競合が発生する可能性があります。

Unity カタログ対応ワークスペースで Cosmos DB を使用するには、Databricks Runtime 13.0 ML 以上を実行しているクラスター、またはクラスター ポリシー制限なしまたは共有コンピューティングを使用して Databricks Runtime 11.3 LTS ML 以上を実行しているクラスターを使用する必要があります。

Spark コネクタ

Azure Cosmos DB を使用するには、アカウントを Core (SQL) API で作成し、ネットワーク接続方法を [すべてのネットワーク] に設定する必要があります。 適切な Azure Cosmos DB Spark 3 OLTP Connector for SQL API をクラスターにインストールする必要があります。 Databricks では、Spark 3.3 用のコネクタがリリースされるまで Spark 3.2 の最新版コネクタをインストールすることを推奨しています。

データベースまたはコンテナーを手動で作成しない - publish_table() を使用する

Cosmos DB オンライン ストアでは、オフライン ストアとは異なるスキーマを使用します。 具体的には、オンライン ストアでは、主キーは列 _feature_store_internal__primary_keys にキーの組み合わせとして保存されます。

Feature Store から Cosmos DB オンライン ストアにアクセスできるようにするには、publish_table() を使用してオンライン ストアにテーブルを作成する必要があります。 Cosmos DB でデータベースまたはコンテナーを手動で作成しません。 publish_table() によって自動的に行われます。

バッチ計算された特徴をオンライン ストアに公開する

更新された特徴を定期的に公開する Databricks ジョブを作成してスケジュールすることができます。 このジョブには、更新された特徴を計算するコードを含めたり、特徴更新プログラムを計算して公開する個別のジョブを作成して実行したりすることができます。

SQL ストアの場合、次のコードでは、"recommender_system" という名前のオンライン データベースがオンライン ストアに既に存在し、オフライン ストアの名前と一致することを前提とします。 データベースに "customer_features" という名前のテーブルがない場合、このコードが作成します。 また、特徴は毎日計算され、パーティション分割された列 _dt として格納されます。

次のコードは、このオンライン ストアにアクセスするシークレットが作成されたものと想定します。

Cosmos DB

Cosmos DB のサポートは、Unity カタログ クライアントにおける Feature Engineering のすべてのバージョン および Feature Store クライアント v0.5.0 以降のバージョンで利用できます。

import datetime
from databricks.feature_engineering.online_store_spec import AzureCosmosDBSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureCosmosDBSpec(
  account_uri='<account-uri>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

SQL ストア

import datetime
from databricks.feature_engineering.online_store_spec import AzureMySqlSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

オンライン ストアにストリーミング特徴を公開する

オンライン ストアに特徴を継続的にストリーミングするには、streaming=True を設定します。

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  streaming=True
)

オンライン ストアに一部の特徴を公開する

選択した特徴のみをオンライン ストアに公開するには、features 引数を使用して、公開する特徴名を指定します。 主キーとタイムスタンプ キーは常に公開されます。 features 引数を指定しない場合や値が None の場合は、オフライン特徴テーブルのすべての特徴が公開されます。

Note

オンライン ストアに機能のサブセットのみを発行する場合でも、オフライン テーブル全体が有効な機能テーブルである必要があります。 オフライン テーブルにサポートされていないデータ型が含まれている場合、そのテーブルからオンライン ストアに機能のサブセットを発行することはできません。

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  features=["total_purchases_30d"]
)

特定のデータベースに特徴テーブルを公開する

オンライン ストア 仕様で、データベース名 (database_name) とテーブル名 (table_name) を指定します。 これらのパラメーターを指定しない場合は、オフライン データベース名と特徴テーブル名が使用されます。 database_name はオンライン ストアに既に存在している必要があります。

online_store = AzureMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  database_name='<database-name>',
  table_name='<table-name>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

既存のオンライン特徴テーブルまたは特定の行を上書きする

publish_table 呼び出しで mode='overwrite' を使用します。 オンライン テーブルは、オフライン テーブル内のデータによって完全に上書きされます。

注意

Azure Cosmos DB では上書きモードはサポートされていません。

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  mode='overwrite'
)

特定の行のみを上書きするには、filter_condition 引数を使用します。

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

オンライン ストアからパブリッシュされたテーブルを削除する

Feature Store クライアント v0.12.0 以降では、drop_online_table を使用して、発行されたテーブルをオンライン ストアから削除できます。 drop_online_table で発行されたテーブルを削除すると、テーブルはオンライン ストア プロバイダーから削除され、オンライン ストア メタデータは Databricks から削除されます。

fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
  name='recommender_system.customer_features',
  online_store = online_store
)

注意

  • drop_online_table によって、パブリッシュされたテーブルがオンライン ストアから削除されます。 Databricks の機能テーブルは削除されません。
  • 発行されたテーブルを削除する前に、テーブルがモデル サービス機能の検索に使用されていないこと、および他のダウンストリーム依存関係がないことを確認する必要があります。 削除は元に戻すことができないので、依存関係が失敗する可能性があります。
  • 依存関係をチェックするには、drop_online_table を実行する前に、削除する予定の公開テーブルのキーをローテーションすることを検討してください。