创建和提供在线特征

为延迟敏感的机器学习推理工作流程创建和提供在线特征。在您正在创建的特征视图上启用在线特征,或更新现有特征视图以启用在线服务。

重要

您必须拥有 Snowflake 版本 9.26 或更高版本以及 snowflake-ml-python 版本 1.18.0,才能使用在线特征服务。

在线特征服务具有以下优势:

  • 用于实时推理的低延迟点查找

  • 来自离线源的自动数据同步

  • 完全托管的基础设施和维护

  • 适用于要求苛刻的工作负载的弹性扩展

在线特征服务由 在线特征表 提供支持。

数据新鲜度

具有在线特征服务的特征视图会自动同步来自离线商店的数据。

使用 target_lag 参数来配置将数据同步到在线特征表的频率。您可以将此值设置为从最短 10 秒到最长 8 天。

在线功能表会在后台使用您指定的值进行刷新。如果连续五次刷新失败,则在线功能表将暂停。有关刷新失败故障排除的信息,请检查刷新历史记录。

刷新模式

Snowflake 使用以下刷新模式来更新数据:

  • 增量刷新:这是首选且最有效的模式。Snowflake 跟踪源中的更改,并仅将新行或更新的行合并到在线商店中。这样可以最大限度地降低计算和 I/O 成本。

  • 完整刷新:此模式会删除表中的所有现有数据,并从源重新加载所有内容。它更耗费资源,在无法进行增量刷新时使用。

您可以显式将刷新模式设置为 INCREMENTAL 或 FULL,也可以将其设置为 AUTO,让 Snowflake 确定最有效的可用刷新模式。

时间序列数据处理

为确保数据一致性,可以指定 timestamp_col。当在源中找到具有相同主键的多行时,Snowflake 仅引入具有最新时间戳的版本。如果未指定时间戳列,则最近处理的行优先。

提供创建和提供在线特征的访问权限

在开始使用在线特征商店之前,必须向相关角色提供必要的权限。

要提供权限,请使用 SQL 中的访问控制设置 中描述的访问控制脚本。运行脚本后,授予以下权限:

GRANT CREATE ONLINE FEATURE TABLE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);

GRANT SELECT, MONITOR ON FUTURE ONLINE FEATURE TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

GRANT SELECT, MONITOR ON ALL ONLINE FEATURE TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
Copy

使用 Python API 管理和提供在线特征

以下示例展示了在创建新特征视图时如何配置在线特征服务。您可以使用 OnlineConfig 对象来指定在线服务设置,例如目标数据新鲜度滞后。

from snowflake.ml.feature_store import FeatureView
from snowflake.ml.feature_store.feature_view import OnlineConfig

online_config = OnlineConfig(enable=True, target_lag="30 seconds")

fv = FeatureView(
    name="MY_FV",
    entities=[entity],
    feature_df=my_df, # Snowpark DataFrame containing feature transformations
    timestamp_col="ts", # optional timestamp column name in the dataframe
    refresh_freq="5 minutes",
    refresh_mode="AUTO", # refresh mode of the feature data
    desc="my feature view", # optional description
    online_config=online_config
)

fv = fs.register_feature_view(feature_view=fv, version="v1")
Copy

以下是 OnlineConfig 参数:

参数

类型

描述

默认值

启用

布尔,可选

指定是否应为特征视图启用在线特征服务。

默认值:None。False

target_lag

Str,可选

采用“<num> (seconds|minutes|hours|days|s|m|h|d)”格式的字符串,用于指定目标数据新鲜度滞后。

默认值:None。10 秒

备注

refresh_freqOnlineConfig.target_lag 独立运作。在上面的示例中,从 my_df 表示的源数据到在线数据存储的有效目标数据传播延迟将是 refresh_freq + online_config.target_lag

更新特征视图以启用/禁用在线特征服务

对于现有的特征视图,您可以使用 update_feature_view 方法更新在线特征服务配置。您可以使用此方法为现有特征视图启用在线特征服务。

使用以下代码启用在线特征服务。

# Enable online feature serving

fs.update_feature_view(
    name="<name>",
    version="<version>",
    online_config=OnlineConfig(enable=True, target_lag="5 minutes")
)
Copy

使用以下代码禁用在线特征服务。

# Disable online feature serving

fs.update_feature_view(
    name="<name>",
    version="<version>",
    online_config=OnlineConfig(enable=False)
)
Copy

从在线存储中检索特征

要从在线存储中检索给定样本的特征值,请使用 read_feature_view 方法并传递特征名称列表以及样本的联接键:

fs.read_feature_view(
    feature_view=fv,
    keys=[["<k_1>", "<k_2>"]],
    feature_names=["<feature1>", "<feature2>", "<feature3>"],
    store_type=StoreType.ONLINE
)
Copy

暂停/恢复在线数据刷新

使用以下代码暂时暂停数据刷新。

fs.suspend_feature_view(feature_view=fv)
Copy

使用以下代码恢复数据刷新。

fs.resume_feature_view(feature_view=fv)
Copy

这些操作会暂停/恢复离线特征视图(动态表和关联任务)和在线特征表(如果存在),以确保所有存储类型的状态一致。

手动刷新特征视图

fs.refresh_feature_view(
    feature_view=fv,
    store_type=<store_type>
)
Copy

store_type 实参指定是否刷新离线 (StoreType.OFFLINE) 或在线 (StoreType.ONLINE) 特征数据。

查看刷新历史记录

fs.get_refresh_history(
    feature_view=fv,
    store_type=store_type
)
Copy

store_type 实参指定是否返回离线 (StoreType.OFFLINE) 或在线 (StoreType.ONLINE) 存储刷新历史记录。

了解成本

在线特征表在以下使用模式下会产生成本:

  • 虚拟仓库计算:对混合表的查询通过虚拟仓库执行。键查找和数据引入操作都会按标准费率使用虚拟仓库 Credit。有关更多信息,请参阅 虚拟仓库 Credit 使用量

  • 云服务计算:Snowflake 架构的云服务层在执行身份验证、元数据管理和访问控制等后台任务时会消耗 credit 。需要识别底层基础对象中的变更,并确定何时需要刷新操作。有关更多信息,请参阅 云服务 Credit 使用量

  • 混合表存储:存储成本基于每 GB 的统一月费率。它比传统的 Snowflake 存储成本更高,但与存储混合表的成本相同。有关更多信息,请参阅 Credit 使用量表 中的表 3(b)。

  • 混合表请求:这些请求将 无服务器 Credit 使用量 用于对行存储群集进行读/写操作。写入这些群集或从这些群集读取的数据量可用于计算 Credit 使用量,每次操作至少 4 KB 使用量。用于执行后台操作(如压缩)的计算资源也会消耗 Credit。有关更多信息,请参阅 Credit 使用量表 中的表 5。

小技巧

增量刷新有助于降低成本。增量更新通常比完全刷新更具成本效益,从而降低计算和数据引入成本。

成本监控

要监控成本,请使用以下视图:

-- Hybrid table request credits
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.HYBRID_TABLE_USAGE_HISTORY;

-- Storage consumption
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.STORAGE_USAGE;
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATABASE_STORAGE_USAGE_HISTORY;

-- Overall costs
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY;
Copy
语言: 中文