將功能發佈至在線商店
本文說明如何將功能發佈至在線商店以進行實時服務。
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 建立帳戶,而且網路連線方法必須設定為 [所有網络]。 適用於 SQL API 的適當 Azure Cosmos DB Spark 3 OLTP 連接器必須安裝在叢集上。 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"]
)
將功能數據表發佈至特定資料庫
在在線商店規格中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
一天輪替您計劃刪除之已發佈數據表的索引鍵。