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

オンラインストアへの機能の公開

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

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

オンラインストアプロバイダー

Unity CatalogのFeature Engineeringを使用した公開

レガシーワークスペース Feature Store で公開する

レガシーMLflow Model Servingでの特徴量検索

Model Servingでの特徴量検索

Amazon DynamoDB

X

X (Feature Store クライアント v0.3.8 以降)

X

X

Amazon Aurora (MySQL 互換)

X

X

Amazon RDS MySQL

X

X

注記

DynamoDB オンラインストアは、オフラインストアとは異なるスキーマを使用します。 具体的には、オンラインストアでは、プライマリキーは _feature_store_internal__primary_keys列に結合キーとして格納されます。

Feature Store が DynamoDB オンラインストアにアクセスできるようにするには、 publish_table()を使用してオンラインストアにテーブルを作成する必要があります。 DynamoDB 内にテーブルを手動で作成しないでください。 publish_table() は自動的にそれを行います。

バッチ-コンピュート フィーチャーをオンラインストアに公開する

Databricks ジョブを作成してスケジュールし、更新された機能を定期的に発行できます。 このジョブには、更新された機能を計算するコードを含めることも、機能の更新を計算して公開するための別のジョブを作成して実行することもできます。

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

次のコードは、このオンラインストアにアクセスするための シークレットを作成した ことを前提としています。

DynamoDB を使用している場合は、DatabricksDatabricksクラスターにアタッチされたインスタンスプロファイルを使用して書き込み認証を行うことをお勧めします。インスタンスプロファイルは、機能の公開にのみ使用できます。機能値を検索するには、Databricks シークレットを使用する必要があります。

DynamoDB support is available in all versions of Feature Engineering in Unity Catalog client, and Feature Store client v0.3.8 and above.

Python
import datetime
from databricks.feature_engineering.online_store_spec import AmazonDynamoDBSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store

# do not pass `write_secret_prefix` if you intend to use the instance profile attached to the cluster.
online_store = AmazonDynamoDBSpec(
region='<region>',
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'
)

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

オンラインストアに機能を連続してストリームするには、 streaming=Trueを設定します。

Python
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 の場合は、オフライン特徴量テーブルのすべてのフィーチャが公開されます。

注記

オフライン テーブル全体は、フィーチャの一部のみをオンライン ストアにパブリッシュする場合でも、有効なフィーチャ量テーブルである必要があります。 オフライン テーブルにサポートされていない データ タイプが含まれている場合、そのテーブルのフィーチャのサブセットをオンライン ストアに公開することはできません。

Python
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 はオンラインストアにすでに存在している必要があります。

Python
online_store = AmazonRdsMySqlSpec(
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'を使用します。オンラインテーブルは、オフラインテーブルのデータによって完全に上書きされます。

注記

Amazon DynamoDB は上書きモードをサポートしていません。

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

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

Python
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から削除されます。

Python
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 パブリッシュされたテーブルを Uオンラインストア から削除します。 Databricks の特徴量テーブルは削除されません。
  • パブリッシュされたテーブルを削除する前に、そのテーブルがモデルサービング機能の検索に使用されていないこと、および他のダウンストリーム依存関係がないことを確認する必要があります。 この削除は元に戻せないため、依存関係が失敗する可能性があります。
  • 依存関係を確認するには、 drop_online_tableを実行する前に、削除する予定のパブリッシュ済みテーブルのキーをローテーションすることを検討してください。