Databricks Online 功能存放區是高效能、可調整的解決方案,可將功能數據服務至在線應用程式和實時機器學習模型。 由 Databricks Lakebase 提供支援,線上功能商店提供低延遲的高規模功能資料存取,同時維持與離線功能表的一致性。
線上功能商店的主要使用案例包括:
- 使用功能服務端點向即時應用程式提供功能,例如建議系統、詐騙偵測和個人化引擎。
- 模型端即時推理的自動特徵查詢。
新的線上功能商店現在是以 Lakebase 自動縮放專案的形式建立的。 關於細節和差異,請參見 Lakebase 在自動縮放上的統一。
Requirements
Databricks Online 功能存放區需要 Databricks Runtime 16.4 LTS ML 或更新版本。 您也可以使用 無伺服器計算。
若要使用 Databricks Online 功能存放區,您必須先安裝套件。 每次執行筆記本時,都必須執行下列幾行程序代碼:
%pip install databricks-feature-engineering>=0.13.0
dbutils.library.restartPython()
建立線上商店
當您建立線上商店時,您可以佈建高可用性的受管基礎結構,以進行即時功能服務。 API 會 create_online_store 建立一個 Lakebase 自動擴展實例。 如需 Lakebase 自動擴展的詳細資訊,請參閱 Lakebase Postgres。
若要管理成本,請在未用於開發和測試時 刪除線上商店 。
若要建立新的線上功能存放區:
from databricks.feature_engineering import FeatureEngineeringClient
# Initialize the client
fe = FeatureEngineeringClient()
# Create an online store with specified capacity
fe.create_online_store(
name="my-online-store", # maximum of 63 bytes
capacity="CU_2" # Valid options: "CU_1", "CU_2", "CU_4", "CU_8"
)
這個設定控制 capacity 你的線上商店能使用多少運算資源。 其值為 Lakebase 運算單元(CU)。 關於可用的運算大小及 CU 包含的內容,請參見 可用運算容量。
關於 Lakebase 自動擴展實例的權限資訊,請參閱 「授予專案權限」。
使用客戶管理金鑰進行加密
線上功能商店支援使用客戶管理金鑰(CMK)進行靜態加密,這是因為底層有 Lakebase Autoscaling 提供支援。 不需要 Lakebase 或 Feature Store 設定;CMK 會自動套用到相關的工作區。
當以下所有條件成立時,CMK 會自動適用:
- 工作空間設有由客戶管理的金鑰,並設定用於管理服務。 請參閱 Lakebase 的客戶管理金鑰。
- 線上功能商店由 Lakebase 自動縮放專案支持。 所有在 2026 年 3 月 23 日之後建立的
fe.create_online_store線上功能商店都使用 Lakebase 自動縮放。 - 作為後端支援的 Lakebase 專案是在您所在區域開放 CMK 支援後建立的。 之前建立的 Lakebase 專案即使後續工作區啟用 CMK,也不會用 CMK 加密。
支持線上功能商店的 Lakebase 專案名稱與線上商店相同。 要找到它,請點擊 在工作區右上角的 Apps Switcher 開啟 Lakebase App,找到該名稱的專案。 要確認商店是否用你的 CMK 加密,請查看該專案的 客戶管理鑰匙 狀態卡。 請參閱 檢查加密狀態。
管理在線商店
以下代碼顯示如何檢索線上商店:
# List all accessible online stores
stores = fe.list_online_stores()
for store in stores:
print(f"Store: {store.name}, State: {store.state}, Capacity: {store.capacity}")
# Get information about an existing online store
store = fe.get_online_store(name="my-online-store")
if store:
print(f"Store: {store.name}, State: {store.state}, Capacity: {store.capacity}")
如果你用 fe.create_online_store建立了線上商店,你可以用 fe.update_online_store更新:
# Update the capacity of an online store
# Note: this does not work for an Autoscaling instance that was created using the projects API or the UI
updated_store = fe.update_online_store(
name="my-online-store",
capacity="CU_4" # Upgrade to higher capacity
)
將讀取複本新增至在線商店
在建立或更新線上功能商店時,你可以透過指定 read_replica_count 參數將讀取副本加入線上商店。 讀取流量會自動分散到讀取複本,減少延遲並改善高並行工作負載的效能和延展性。
你無法為使用 API 或 UI 建立的 Lakebase 自動擴展專案新增讀取副本。
Important
停用線上商店的高可用性,會導致讀取該商店的功能服務端點(Feature Serving)或模型服務端點(Model Serving)連線中斷。 重新啟動受影響的端點以恢復連線。
若要更改高可用性設定而不中斷連接的端點,請使用藍綠部署:
- 建立一個新的線上商店,並設定目標設定。
- 將特徵資料表發佈到新商店。
- 將新的服務端點指向新商店。
- 驗證新儲存裝置與新端點之間的連結。
- 關閉舊的終端和線上商店。
將功能表發佈到線上商店
在在線商店處於 AVAILABLE 狀態之後,您可以發佈功能數據表,使其可供低延遲存取。 API publish_table 會將離線功能表的資料同步到使用 create_online_store API 建立的線上商店。 檢閱下表,以確保您的來源離線資料表已針對即時使用案例正確建立。
| 用例 | 使用此方法建立離線功能表 |
|---|---|
| 線上商店中只有每個實體 ID 的最新特徵值可供即時應用程式使用。 離線資料來源中可能存在具有相同主索引鍵值但不同時間序列索引鍵值的多個資料列,而且會在發佈管線中刪除重複資料。 此案例最常用於線上模型或功能服務端點。 |
建立 具有 時間序列指定的資料表 |
| 離線表中的最新和所有先前的時間序列特徵值可在線上商店中找到,供即時應用程式存取。 來源 (離線) 表格中的所有資料列都會發佈而不進行重複資料消除。 只有當端點必須透過實體 ID 及精確日期/時間戳取得特定歷史特徵值時,才會使用此方法——例如,用來驗證或回測預測,以對過去某個時間點所提供的精確特徵值進行回測。 這是在字串型主鍵上進行的精確比對查詢,而不是特定時間點(as-of)查詢或時間範圍查詢。 若要使用 a DATE 或 TIMESTAMP 欄位作為純查詢鍵(不含時間序列語意),請將欄位類型改為 STRING。 |
建立 不含 時間序列指定的資料表 |
發佈至線上商店的先決條件
所有功能資料表 (有或沒有時間序列) 都必須符合下列需求,才能發佈:
- 主鍵限制:線上商店發佈所需
- 非空主鍵:主鍵欄位不能包含 NULL 值
-
啟用變更資料饋送:
CONTINUOUS和TRIGGERED的發佈模式所需。 請參閱 使用變更資料摘要,了解如何啟用 Delta 資料表變更資料摘要,並參閱 發佈模式,了解發佈模式的相關說明。
-- Enable CDF if not already enabled
ALTER TABLE catalog.schema.your_feature_table
SET TBLPROPERTIES ('delta.enableChangeDataFeed' = 'true');
-- Ensure primary key columns are not nullable
ALTER TABLE catalog.schema.your_feature_table
ALTER COLUMN user_id SET NOT NULL;
發布功能表
若要將功能數據表發佈至在線商店:
from databricks.ml_features.entities.online_store import DatabricksOnlineStore
# Get the online store instance
# For Lakebase Autoscaling projects creating using the Lakebase API or UI,
# `name` is the last part of the resouce name: projects/{online_store_name}
online_store = fe.get_online_store(name="my-online-store")
# Publish the feature table to the online store
fe.publish_table(
online_store=online_store,
source_table_name="catalog_name.schema_name.feature_table_name",
# for online_table_name, the catalog name, schema name, and table name each are limited to a maximum of 63 bytes
online_table_name="catalog_name.schema_name.online_feature_table_name",
# `publish_mode` argument is optional and defaults to "TRIGGERED" mode if not specified
)
此 publish_table 工作會執行下列作業:
- 如果不存在,請在在線商店中建立數據表。
- 將功能數據從離線功能表同步到線上特徵庫。
- 設定必要的基礎結構,讓在線商店與離線數據表保持同步。
publish_table 總是使用Lakebase Autoscaling專案的預設分支。
發佈模式
publish_mode 參數決定線上資料表依據離線特徵資料表中的變更進行更新的方式與時機。
完整支援模式詳情請參見 同步模式 。
以下為所支援的模式摘要:
| Mode | Description |
|---|---|
TRIGGERED |
Default. 透過 API 或排程的方式,逐步更新線上資料表,以反映離線資料表的變更內容。 定期觸發資料同步的選項:
此模式需要在離線資料表上啟用變更資料饋送功能。 請參閱 線上商店出版的先決條件。 |
CONTINUOUS |
線上資料表透過串流管線設置,能立即更新線上商店,當新資料被寫入離線特徵表時。 |
SNAPSHOT |
執行一次性同步,將來源資料表的所有資料複製到線上商店。 當兩個同步操作之間有大量現有資料列更新時,此模式特別有效率。 |
此 publish_mode 參數取代了從 v0.13.0.1 及更早版本開始的 streaming 參數。 對於向下相容性,若 streaming=True 通過 ,則等同於設定 publish_mode="CONTINUOUS"。
刪除線上表格
要刪除線上資料表,請使用 Databricks SDK:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.feature_store.delete_online_table(online_table_name="catalog_name.schema_name.online_feature_table_name")
Important
這是刪除線上表格 唯一 推薦的方法。 它會將該表格從 Unity 目錄和資料庫中移除。 其他方法如 Databricks SQL 指令 DROP TABLE 或 Python SDK 指令用來 刪除同步資料表,則不會 從底層資料庫儲存中刪除該資料表。
探索和查詢在線功能
在已發佈的資料表狀態顯示為「可用」之後,您可以透過數種方式來探索和查詢功能數據:
Unity 目錄 UI:流覽至 Unity 目錄中的在線數據表,以檢視範例數據,並直接在 UI 中探索架構。 這提供方便的方式來檢查您的功能數據,並確認發佈程式是否已順利完成。
SQL 編輯器:如需更進階的查詢和數據探索,您可以使用 SQL 編輯器對在線功能數據表執行 PostgreSQL 查詢。 這可讓您對特徵數據執行複雜的查詢、聯結和分析。 關於如何在線上商店使用 SQL 編輯器的詳細說明,請參見 「從 Lakebase SQL 編輯器查詢」。
在即時應用程式中使用在線功能
若要提供即時應用程式和服務的功能,請建立提供端點的功能。 請參閱 「Serve 功能表格」。
使用 Databricks 特徵定型的模型,會自動追蹤其定型的特徵歷程。 當部署為端點時,這些模型會使用 Unity 目錄在在線商店中尋找適當的功能。 如需詳細資訊,請參閱 在在線工作流程中使用功能。
刪除線上商店
若要刪除線上商店:
fe.delete_online_store(name="my-online-store")
Note
刪除在線發佈的數據表可能會導致下游相依性發生非預期的失敗。 刪除資料表之前,您應該確定其在線功能不再由模型服務或功能服務端點使用。
成本最佳化的最佳做法
- 重複使用線上商店:您可以將多個功能表發佈到單一線上商店。 針對開發、測試和訓練案例,建議在多個專案或使用者之間共用一個線上商店,而不是建立個別的商店。
- 適當調整容量:先從 CU_2 開始進行測試,並且僅根據效能與成本向上或向下擴展。
- 刪除未使用的線上商店:線上商店不斷產生成本。 刪除不再需要的在線商店。
Limitations
- 線上資料表的目錄名稱必須與其底層資料庫名稱相符。 線上功能服務要求線上資料表的 Unity 目錄名稱與其底層 Lakebase(Postgres)資料庫名稱相等;若兩者差異,服務端點模型將無法部署。 透過特徵工程 API(
publish_table、materialize_features)進行發佈或實體化,預設會建立對應的目錄。 只有當你指定的目錄是註冊到名稱不同的資料庫時,才會出現不匹配(例如外部目錄或以自訂資料庫名稱建立的受管理線上目錄)。 線上功能提供機制不支援這點。 - 不支援指定特定的線上表格。 當特徵表發佈到多個線上資料表時,模型服務和特徵服務端點總是根據建立時間戳記解析到最早創建的線上資料表。
- 線上功能商店最多支援 3 個讀取副本(共 4 個計算實例,包含主副本)。 讀寫副本在主節點故障時可接管,透過卸載主節點的讀取流量來提供高可用性。
- 發行至 Databricks 線上功能存放區時不支援下列參數:
filter_condition、checkpoint_location、mode、trigger和features。 - 僅支援 Unity 目錄中的功能資料表。
- 不支援 Lakebase 從零到零的縮放。
- 如果功能服務和模型服務端點已經存在,查詢多個線上功能商店的功能仍會繼續運作,但你無法在 Lakebase 自動擴展實例中建立類似的新端點。
- 使用專案 API 或 UI 建立的自動縮放實例不使用以下欄位:
creator、read_replica_count、capacity和 。 - 你無法更新使用專案 API 或 UI 建立的自動縮放實例。
- 客戶管理金鑰(CMK)僅適用於在 CMK 在該地區可用後建立的線上功能商店。 請參見 「使用客戶管理金鑰加密」。
故障排除
錯誤資訊: Skipping publishing to online table '...' because the feature sync pipeline is already running.
此錯誤發生在多個筆記本或工作同時嘗試發佈到線上資料表時。 每個線上資料表一次只允許一次同步操作,以防止資料衝突。
Databricks 建議設計你的工作流程使用單一 publish_table 指令,例如工作結束時的單一任務。 如果工作流無法這樣協調,請運用 get_status() 等待其他發佈指令同步完成後再觸發新的發佈。
錯誤訊息:當端點查詢功能項目時,出現 KeyError: 'OAUTH_TOKEN' 或 password authentication failed
功能服務端點(Feature Serving 或 Model Serving)端點在線上資料表被刪除並重建後,功能查找會出現這些錯誤而失敗。 即使資料表名稱相同,重新建立資料表也會產生新的 Unity 目錄可保護項目,因此端點的服務主體會失去其在建置端點時獲得的 SELECT 授權。 端點仍可回報 Ready ,同步管線仍可顯示成功執行。 關於發生原因及復原方法,請參見「更新一個線上功能服務端點的相依關係」。
範例筆記本
下列筆記本示範如何使用 Databricks Lakebase 設定及存取 Databricks Online Feature Store 的範例。
Lakebase 筆記本的線上功能商店
其他資源
- 深入瞭解 Databricks 中的功能工程。
- 探索 Unity 目錄中的數據控管和譜系。
- 瞭解 Lakebase 架構和功能。