Share via


將功能發佈至線上商店

本文說明如何將功能發佈至線上商店以進行即時服務。

Databricks 功能存放區支援下列線上商店:

線上商店提供者 使用 Unity 目錄中的功能工程發佈 使用工作區功能存放區發佈 舊版 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 功能存放區時要記住的一些重要事項。

已啟用 Unity 目錄的工作區

在 Databricks Runtime 12.2 LTS ML 和下方,Cosmos DB 線上商店提供者與已啟用 Unity 目錄的工作區不相容。 Unity 目錄和官方 Cosmos DB Spark 連接器 都會修改 Spark 目錄。 當您在執行 Databricks Runtime 12.2 LTS ML 或以下的叢集上,從已啟用 Unity 目錄的工作區將功能發佈至 Cosmos DB 時,可能會發生寫入衝突,導致功能存放區發佈至 Cosmos DB 失敗。

若要在已啟用 Unity 目錄的工作區中使用 Cosmos DB,您必須使用執行 Databricks Runtime 13.0 ML 或更新版本的叢集,或使用叢集原則 Unrestricted Shared Compute 執行 Databricks Runtime 11.3 LTS ML 或更新版本的叢集。

Spark 連接器

若要使用 Azure Cosmos DB,必須使用 Core (SQL) API 建立帳戶,而且網路連線方法必須設定為 [所有網路 ]。 叢集上必須安裝適當的 Azure Cosmos DB Spark 3 OLTP 連線or for SQL API 。 Databricks 建議您安裝 Spark 3.2 的最新連接器版本,直到 Spark 3.3 的連接器發行為止。

請勿手動建立資料庫或容器 - 使用 publish_table()

Cosmos DB 線上商店使用與離線存放區不同的架構。 具體而言,在線上商店中,主鍵會儲存為 資料行 _feature_store_internal__primary_keys 中的合併索引鍵。

若要確保功能存放區可以存取 Cosmos DB 線上商店,您必須使用 publish_table() 在線上商店中建立資料表。 請勿在 Cosmos DB 內手動建立資料庫或容器。 publish_table() 自動為您執行此動作。

將批次計算功能發佈至線上商店

您可以建立並排程 Databricks 作業,以定期發佈更新的功能。 此作業也可以包含程式碼來計算更新的功能,也可以建立並執行個別的作業來計算和發佈功能更新。

對於 SQL 存放區,下列程式碼假設名為 「recommender_system」 的線上資料庫已存在於線上商店中,且符合離線市集的名稱。 如果資料庫中沒有名為 「customer_features」 的資料表,則此程式碼會建立一個資料表。 它也會假設每天計算特徵,並儲存為分割資料行 _dt

下列程式碼假設您已 建立秘密 來存取此線上商店。

Cosmos DB

Cosmos DB 支援適用于 Unity 目錄用戶端的所有功能工程版本,以及 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,則會發佈離線功能資料表中的所有功能。

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>'
)

覆寫現有的線上功能資料表或特定資料列

mode='overwrite'在呼叫中使用 publish_table 。 離線資料表中的資料會完全覆寫線上資料表。

注意

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 一天輪替您計畫刪除之已發佈資料表的索引鍵。