Important
此功能为 公共预览版 ,可在以下区域使用:
westus、westus2、eastus、eastus2、northeurope、westeurope、australiaeast、brazilsouth、canadacentral、centralindia、centralus、southcentralus、southeastasia、uksouth
Databricks Online 功能存储是一种高性能、可缩放的解决方案,用于向联机应用程序和实时机器学习模型提供功能数据。 它由 Databricks Lakehouse 提供支持,可实现大规模低延迟的数据访问,同时保持与离线特征表的一致性。
联机功能存储的主要用例包括:
- 使用特征服务端点向实时应用程序提供特征,例如推荐系统、欺诈检测和个性化引擎。
- 用于模型服务端点进行实时推理的自动特征查找。
Requirements
Databricks 在线特征存储需要 Databricks Runtime 16.4 LTS ML 或更高版本。 还可以使用 无服务器计算。
若要使用 Databricks Online 特性库,必须先安装软件包。 每次运行笔记本时,必须执行以下代码行:
%pip install databricks-feature-engineering>=0.13.0
dbutils.library.restartPython()
创建在线商店
若要创建新的联机功能存储,请执行以下步骤:
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",
capacity="CU_2" # Valid options: "CU_1", "CU_2", "CU_4", "CU_8"
)
容量选项对应于不同的性能层“CU_1”、“CU_2”、“CU_4”和“CU_8”。 每个容量单元将大约 16GB RAM 分配给数据库实例,以及所有关联的 CPU 和本地 SSD 资源。 纵向扩展会线性增加这些资源。 有关详细信息,请参阅 “管理实例容量”。
管理在线商店
以下代码演示如何检索和更新在线商店:
# 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}")
# Update the capacity of an online store
updated_store = fe.update_online_store(
name="my-online-store",
capacity="CU_4" # Upgrade to higher capacity
)
将只读副本添加到在线商店
创建或更新在线商店时,可以通过指定 read_replica_count 参数将只读副本添加到在线商店。 读取流量自动分布在只读副本实例之间,减少延迟并提升性能和可伸缩性,以应对高并发工作负载。
将功能表发布到在线商店
在在线商店处于 “可用 ”状态后,可以发布功能表,使其可用于低延迟访问。 查看下表,确保为实时用例正确创建了源脱机表。
| 用例 | 使用此方法创建脱机功能表 |
|---|---|
| 每个实体 ID 的最新功能值仅在在线商店中可用于实时应用程序。 具有相同主键值的多个行,但脱机数据源中可能存在不同的时序键值,并且将在发布管道中重复数据删除。 这种情况最常用于联机模型或功能服务终结点。 |
创建具有时序指定的表 |
| 脱机表中的最新和所有以前的时序功能值在在线商店中可用,供实时应用程序访问。 源(离线)表中的所有行在发布时不进行去重处理。 这种情况很少发生,但在某些情况下,可能需要在终端通过实体 ID 以及确切的日期/时间戳查询功能,以进行数据验证或反向测试。 |
创建 不带 时序指定的表 |
发布到在线商店的先决条件
发布之前,所有功能表(带或不带时序)都必须满足以下要求:
- 主键约束:在线商店发布所必需的
- 不可为 null 的主键:主键列不能包含 NULL 值
- 开启 Change Data Feed:用于在线商店同步的必要功能。请参阅 启用 Change Data Feed
-- 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
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",
online_table_name="catalog_name.schema_name.online_feature_table_name"
)
该 publish_table 操作执行以下操作:
- 如果不存在,请在在线商店中创建一个表。
- 将功能数据从脱机功能表同步到在线商店。
- 设置必要的基础设施,使在线商店与离线表保持同步。
持续更新联机功能
如果使用 publish_table 调用 streaming=True,则使用流式处理管道设置联机表,以便随着新数据到达脱机功能表而持续更新在线商店。
计划联机功能的更新
若要定期更新在线表格中的特性,请创建运行 publish_table的计划性 Lakeflow 任务。 作业会自动刷新表并增量更新联机功能。 请参阅 Lakeflow Jobs。
探索和查询在线功能
发布表状态显示为“AVAILABLE”后,可以通过多种方式浏览和查询功能数据:
Unity 目录 UI:导航到 Unity 目录中的联机表,查看示例数据并直接在 UI 中浏览架构。 这提供了检查功能数据并验证发布过程是否已成功完成的便捷方法。
SQL 编辑器:为了进行更高级的查询和数据浏览,可以使用 SQL 编辑器针对联机功能表运行 PostgreSQL 查询。 这样,就可以对功能数据执行复杂的查询、联接和分析。 有关将 SQL 编辑器与在线商店配合使用的详细说明,请参阅 SQL 编辑器中的“访问数据库实例”。
在实时应用程序中使用联机功能
若要为实时应用程序和服务提供功能,请创建功能服务终结点。 请参阅 功能服务终结点。
使用 Databricks 中的特征训练的模型会自动跟踪世系,以跟踪他们训练的特征。 部署为端点时,这些模型使用 Unity Catalog 从在线商店中查找适当的特征。 有关详细信息,请参阅 联机工作流中的“使用功能”。
删除在线商店
删除在线商店:
fe.delete_online_store(name="my-online-store")
Note
删除联机发布的表可能会导致下游依赖项出现意外故障。 在删除表之前,应确保模型服务或特性服务终结点不再使用其在线特性。
Limitations
- Databricks 联机功能存储的最大只读副本数为 2。 若要提高这些限制,请联系 Databricks 客户团队。
- 发布到 Databricks Online 功能存储时不支持以下参数:
filter_condition、、checkpoint_locationmode、和triggerfeatures。 - 仅支持 Unity 目录中的功能表。
- 唯一支持的发布模式是“merge”。
示例笔记本
以下笔记本展示了如何使用 Databricks Lakebase 配置和访问 Databricks 在线特征存储的示例。
使用 Lakebase 笔记本的联机功能存储
其他资源
- 详细了解 Databricks 中的特征工程。
- 浏览 Unity Catalog 中的数据治理和数据血统。
- 了解 Lakebase 体系结构和功能。