创建和提供在线特征

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

重要

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

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

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

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

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

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

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

数据新鲜度

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

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

The online feature tables are refreshed in the background using the value that you've specified. The online feature table is suspended if there are five consecutive refresh failures. For information about troubleshooting the refresh failure, check your refresh history.

刷新模式

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
语言: 中文