Databricks 在线特征库

Important

此功能为 公共预览版 ,可在以下区域使用:

westuswestus2eastuseastus2northeuropewesteuropeaustraliaeastbrazilsouthcanadacentralcentralindiacentralussouthcentralussoutheastasiauksouth

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 以及确切的日期/时间戳查询功能,以进行数据验证或反向测试。
创建 不带 时序指定的表

发布到在线商店的先决条件

发布之前,所有功能表(带或不带时序)都必须满足以下要求:

  1. 主键约束:在线商店发布所必需的
  2. 不可为 null 的主键:主键列不能包含 NULL 值
  3. 开启 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 操作执行以下操作:

  1. 如果不存在,请在在线商店中创建一个表。
  2. 将功能数据从脱机功能表同步到在线商店。
  3. 设置必要的基础设施,使在线商店与离线表保持同步。

持续更新联机功能

如果使用 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 笔记本的联机功能存储

获取笔记本

其他资源

  • 了解 Lakebase 体系结构和功能。