本文介绍 DataBuddy 特征工程 SDK(
wedata3-feature-engineering)的完整 API 用法,覆盖客户端初始化、特征数据库管理、特征表的创建、写入、读取、元数据维护、删除、离线特征消费(训练集构建、模型记录、批量推理)以及在线特征表操作。前提条件
已开通 DataBuddy 服务并完成空间初始化。
当前账号在目标 Catalog / Schema 上拥有相应的数据读写权限。
已创建并启用一个可用的计算资源(创建方法详见 创建计算资源)。
运行特征工程代码的内核环境 Python 版本 ≥ 3.10 。
已在 Notebook / Python 内核中安装特征工程 SDK(要求 0.2.3 及以上 ):
%pip install "wedata3-feature-engineering[mlflow3]>=0.2.3"
注意
本文示例基于 0.2.3+ 版本验证。SDK 依赖
mlflow >= 3.10.0, < 3.11.0,若 import wedata 时提示 mlflow 版本不满足,请确认安装的是 [mlflow3] extra(即 wedata3-feature-engineering[mlflow3]),且不要在同一 Notebook 内混装 mlflow 2.x 与 3.x。提示
在 DataBuddy Notebook 内核中运行时,鉴权所需环境变量会被自动注入,无需手动配置;若在本地 IDE 调试,则需自行
export 环境变量,否则初始化 FeatureEngineeringClient(...) 时会抛 EnvironmentError / KeyError。初始化客户端
在代码单元中导入并初始化特征工程客户端。DataBuddy Notebook 内核已预置
spark 会话,直接传入即可;本地调试时需自行创建 SparkSession 并传入。%pip install "wedata3-feature-engineering[mlflow3]>=0.2.3"%pip list | grep wedata3-feature-engineering
from wedata.feature_engineering.client import FeatureEngineeringClientfrom wedata.common.constants.engine_types import EngineTypes# DataBuddy Notebook 内核已预置 spark 会话;本地调试时需自行创建并传入fe = FeatureEngineeringClient(spark)
特征数据库管理
特征表归属于某个 Schema(特征数据库)。若目标 Schema 尚未创建,可先通过 SDK 幂等准备;若已规划好 Schema,可跳过本节直接建表。
# 幂等创建特征数据库(已存在则跳过);支持单段名或二段式 catalog.schemafe.create_database("<schema_name>", catalog_name="<catalog_name>", comment="<数据库描述>")# 列出指定 Catalog 下的全部数据库fe.list_databases(catalog_name="<catalog_name>")# 判断数据库是否存在(任何内部异常都会被吞掉并返回 False)fe.database_exists("<schema_name>", catalog_name="<catalog_name>")# 删除数据库,默认非级联以避免误删;级联删除请慎用fe.drop_database("<schema_name>", catalog_name="<catalog_name>")
接口 | 作用 | 关键参数 |
create_database | 幂等创建特征数据库( CREATE DATABASE IF NOT EXISTS) | database_name(必填,支持二段式 catalog.schema)、catalog_name、comment、location |
drop_database | 删除特征数据库 | database_name、catalog_name、cascade(默认 False,是否级联删表)、if_exists(默认 True) |
list_databases | 列出指定 Catalog 下的全部数据库 | catalog_name(不传则为当前 Catalog) |
database_exists | 幂等检测数据库是否存在 | database_name、catalog_name |
注意
drop_database 在数据库非空且 cascade=False 时会由底层抛错;设置 cascade=True 会级联删除其下所有表,生产环境请谨慎使用。创建特征表
调用
create_table 创建特征表。表结构可由传入的 df 自动推断,也可显式传入 schema;engine_type 为必填项,用于指定底层表引擎:from wedata.common.constants.engine_types import EngineTypes# 方式一:传入 df,自动推断 schema 并写入首批数据fe.create_table(name="<catalog>.<schema>.<table_name>", # 特征表全限定名primary_keys=["<主键列表>"], # 单键传字符串,复合主键传列表timestamp_key=["<时间戳列名>"], # 时间戳键列名(单数)df=<Spark DataFrame>, # 传入 df 可自动推断 schema 并写入首批数据engine_type=EngineTypes.ICEBERG_ENGINE, # 必填:ICEBERG_ENGINE 或 HIVE_ENGINEdescription=["<表描述>"], # 可选)# 方式二:不传 df,显式提供 schema 建空表fe.create_table(name="<catalog>.<schema>.<table_name>",primary_keys=["<主键列名>"],timestamp_key="<时间戳列名>",schema=<PySpark StructType>, # df为空时必填engine_type=EngineTypes.ICEBERG_ENGINE,)
提示
1.
primary_keys 类型为 Union[str, List[str]],单主键可直接传字符串,复合主键传列表。2.
schema 与 df 二选一:当 df 已提供时 schema 可省略(由 df 推断);仅当 df=None 时 schema 必填。3. 其他可选参数:
catalog_name / database_name(在 name 未使用全限定名时指定)、tags(表级标签字典)、partition_columns(分区列)。提示
引擎选择(
engine_type):EngineTypes 提供 ICEBERG_ENGINE(Iceberg 表,推荐)与 HIVE_ENGINE(Hive 表)两种取值。优先选用 Iceberg:它支持 schema evolution 与 time travel,在按时间点回溯特征查询时性能更优。注意
写入前的数据类型治理 :特征工程 SDK 不识别
decimal(p, s) 类型——它会导致记录模型时无法推断模型签名(signature),进而引发在线、离线推理的类型不匹配。建议在写入特征表之前,把所有 decimal 列统一 cast("double"),并将该处理沉淀为可复用的工具函数。时间戳列应保留为时间类型,不要转为字符串,否则无法用作时间戳键。执行成功后,新建的特征表将自动出现在特征管理列表中。
提示
主键与时间戳的选择建议 :主键用于唯一定位一条特征记录;时间戳键用于实现按时间点回溯特征值。建议将业务实体的唯一标识作为主键、特征生成时间作为时间戳键。
写入特征表
如需追加写入更多特征数据,调用
write_table:fe.write_table(name="<catalog>.<schema>.<table_name>", # 目标特征表全限定名df=<Spark DataFrame>, # 待写入的特征数据mode="append", # 写入模式:append(默认)/ overwrite)
流式写入时需额外提供 checkpoint 路径:
fe.write_table(name="<catalog>.<schema>.<table_name>",df=<Streaming DataFrame>,mode="append",checkpoint_location="<checkpoint 路径>", # 流式写入必填trigger={"processingTime": "10 seconds"}, # 可选,流式触发器配置)
写入模式说明 :
append :追加写入,新数据按主键合并入表(默认模式)。
overwrite :覆盖整张表的全部数据,慎用于生产场景。
提示
当前 SDK(0.2.4)
write_table 不支持 merge 模式。增量写入请使用默认的 append。获取与读取特征表
调用
get_table 可以编程方式拿到特征表的完整元数据;调用 read_table 读取特征表数据(返回 Spark DataFrame):# 获取元数据table_info = fe.get_table(name="<catalog_name>.<schema_name>.<table_name>")print(table_info.primary_keys)print(table_info.timestamp_keys)print(table_info.tags)# 读取数据df = fe.read_table(name="<catalog_name>.<schema_name>.<table_name>")df.show(5)
提示
read_table 读取的是离线特征表中的全量数据。在线特征表(PostgreSQL)中的数据用于在线推理服务在收到请求时自动查找特征,无需调用方在 SDK 中显式读取;如需核对在线表数据,可在数据目录中查看对应的在线特征表。维护特征表标签
特征表标签可用于版本号、所属业务线、特征类别等业务分类,可通过 SDK 管理:
# 设置或更新一个标签fe.set_feature_table_tag(name="<catalog_name>.<schema_name>.<table_name>",key="<tag_key>", # 如 "business_line"、"version" 等value="<tag_value>", # 如 "growth"、"v1.2.0" 等)# 删除一个标签fe.delete_feature_table_tag(name="<catalog_name>.<schema_name>.<table_name>",key="<tag_key>",)
设置或删除完成后,标签会同步显示在 Catalog 详情页与特征管理列表的 标签 列。推荐为每张特征表至少维护以下标签,便于检索与治理:
标签键 | 取值示例 | 用途 |
owner | ml-team | 责任人 / 责任团队 |
purpose | test / prod | 用途(实验 / 生产) |
domain | user / order / product | 业务域 |
sla | daily / hourly | 数据更新频率 |
注意
primary_keys、timestamp_keys 等是 SDK 的保留字段,不能 作为自定义标签的 key 使用。提示
版本管理建议 :DataBuddy 当前未提供独立的特征表版本号对象,建议使用
version 标签(如 v1.0.0、v1.1.0)配合 Catalog 表本身的数据变更历史来标识业务版本演进。如需在不同版本之间快速切换,可采用按版本建独立特征表、在训练代码中显式选择的方式。删除特征表
当一张特征表不再被任何模型与下游使用时,可通过 SDK 删除:
fe.drop_table(name="<catalog_name>.<schema_name>.<table_name>")
警告
删除特征表会同时删除底层数据文件,该操作不可恢复。删除前请确认:
没有训练任务、推理任务、Workflow 仍在依赖该表。
没有已发布的在线特征表以该表为来源(需先
drop_online_table)。没有模型工件中的
feature_spec.yaml 仍在引用该表。构建训练数据集
以一组主键(如实体 ID、事件时间戳)作为 DataFrame,调用
create_training_set 拼接多张特征表生成训练数据:from wedata.feature_engineering.client import FeatureEngineeringClientfrom wedata.common.entities.feature_lookup import FeatureLookupfe = FeatureEngineeringClient(spark)# 1. 主键 DataFrame:包含训练标签 (label) + 主键 + 事件时间戳labels_df = spark.table("<catalog_name>.<schema_name>.<label_table_name>")# 2. 定义需要拼接的特征表与字段(强烈推荐使用三段式全限定名,避免依赖默认 catalog)feature_lookups = [FeatureLookup(table_name="<catalog_name>.<schema_name>.<feature_table_name_1>",feature_names=["<feature_column_1>", "<feature_column_2>"],lookup_key=["<primary_key>"],timestamp_lookup_key="<timestamp_key>",),FeatureLookup(table_name="<catalog_name>.<schema_name>.<feature_table_name_2>",feature_names=["<feature_column_3>"],lookup_key=["<primary_key>"],timestamp_lookup_key="<timestamp_key>",),]# 3. 创建训练数据集training_set = fe.create_training_set(df=labels_df,feature_lookups=feature_lookups,label="<label_column>",exclude_columns=[],)training_df = training_set.load_df()
提示
timestamp_lookup_key 用于按时间点回溯特征值(point-in-time correctness),即对每条样本拼接其事件时间点之前最近一次的特征值,避免特征穿越。如需限制回溯的时间范围,可在 FeatureLookup 中配合 lookback_window(datetime.timedelta)使用,仅查找该时间窗内的特征值。注意
数据类型治理 :写入与拼接前务必将
decimal(p,s) 转为 double。SDK 不识别 decimal(p,s) 类型,否则可能导致类型解析失败或在线、离线值不一致。回溯窗口与多表 / On-Demand 特征组合
1. 回溯窗口 :
lookback_window 必须与 timestamp_lookup_key 同时使用,且取值为非负 的 datetime.timedelta(0 表示精确匹配,不传表示不限制),否则会抛 ValueError。2. 多
FeatureLookup + FeatureFunction 组合 :可同时声明多张特征表查找,并通过 FeatureFunction 引入按需计算(On-Demand)特征:import datetimefrom wedata.common.entities.feature_lookup import FeatureLookupfrom wedata.common.entities.feature_function import FeatureFunctionfeature_lookups = [FeatureLookup(table_name="<catalog_name>.<schema_name>.<feature_table_a>",lookup_key=["<primary_key_a>"],feature_names=["<feature_col_1>", "<feature_col_2>"],rename_outputs={"<feature_col_1>": "<renamed_col_1>"}, # 输出列重命名,避免同名冲突),FeatureLookup(table_name="<catalog_name>.<schema_name>.<feature_table_b>",lookup_key=["<primary_key_b>"],timestamp_lookup_key="<timestamp_key>",lookback_window=datetime.timedelta(days=30), # 仅取近 30 天内的特征值),FeatureFunction(# 按需计算特征(On-Demand UDF)udf_name="<catalog_name>.<schema_name>.<udf_name>",input_bindings={"<udf_input_param>": "<renamed_col_1>"},output_name="<udf_output_col>",),]
训练并记录模型
使用拼接好的训练 DataFrame 训练模型,并通过
log_model 把模型连同特征来源信息一起记录到 MLflow:import mlflowfrom sklearn.pipeline import Pipelinefrom sklearn.preprocessing import OneHotEncoder, StandardScalerfrom sklearn.compose import ColumnTransformerfrom sklearn.ensemble import GradientBoostingClassifierwith mlflow.start_run() as run:pdf = training_df.toPandas()X = pdf.drop(columns=["<label_column>"])y = pdf["<label_column>"]# 预处理(OHE / Scaler 等)必须封装进 Pipeline,禁止在 Pipeline 外部用pd.get_dummies 等手工预处理,# 否则在线推理时无法复现训练期的特征变换,导致线上线下不一致。preprocessor = ColumnTransformer(transformers=[("cat", OneHotEncoder(handle_unknown="ignore"), ["<categorical_feature>"]),("num", StandardScaler(), ["<numeric_feature_1>", "<numeric_feature_2>"]),])model = Pipeline(steps=[("preprocessor", preprocessor),("clf", GradientBoostingClassifier()),])model.fit(X, y)fe.log_model(model=model,artifact_path="<model_artifact_path>",flavor=mlflow.sklearn,training_set=training_set,registered_model_name="<catalog_name>.<schema_name>.<model_name>",infer_input_example=True,# 自动根据训练数据生成 input_example 与模型签名)
注意
关于
log_model 需遵守:1. 必须用
fe.log_model,不能用 mlflow.sklearn.log_model:只有前者会把 FeatureSpec 打包进 MLmodel,后者会导致 score_batch 找不到特征来源。2. 必须传
training_set:模型签名与 input_example 由 SDK 根据 training_set.feature_spec 自动推断,对齐的是特征表中的原始列。3.
infer_input_example=True 自动从训练数据生成 input_example 与签名,是部署在线推理服务的前置条件,务必开启;不要再手动 infer_signature(...) 或手动传 input_example=...,否则会与 feature_spec 的原始列错位、污染契约。4. 所有预处理(OneHotEncoder、StandardScaler、自定义函数等)必须封装进
sklearn.Pipeline,传入的 model 是整条 Pipeline。不能在 Pipeline 外部用 pd.get_dummies / 手动 StandardScaler.fit_transform 后再 model.fit(...)——外部预处理步骤不会被序列化进 MLmodel,推理时 SDK 从特征表 lookup 出来的是原始 string 列,喂给只认 OHE 后列名的裸模型,轻则报 Feature names unseen at fit time,重则所有样本静默输出训练集均值。5.
registered_model_name 建议使用三段式 catalog.schema.model_name,便于 Model Registry 治理。fe.log_model 会在模型工件中写入一份 feature_spec.yaml,记录该模型在推理时所依赖的特征表、字段、主键与时间戳关系。这份文件将在后续的 score_batch 与在线推理中被自动读取。离线批量推理
完成训练后,调用
score_batch 进行离线批量推理。此时只需提供主键 DataFrame,特征列由 SDK 根据模型工件中的 feature_spec.yaml 自动从特征表中查找并补齐:# 主键 DataFrame:仅包含主键 + 事件时间戳,不需要特征列# 注意:时间戳列需与特征表 schema 类型一致(如需 cast 为 timestamp)keys_df = spark.table("<catalog_name>.<schema_name>.<scoring_table_name>")result_df = fe.score_batch(model_uri="models:/<catalog_name>.<schema_name>.<model_name>/<version>", # 版本号对齐训练产出的最新版本df=keys_df,result_type="double", # 可选,预测结果列的数据类型,默认 "double"timestamp_key="<timestamp_key>", # 训练含 timestamp_lookup_key 时强烈建议显式指定,保证 point-in-time 一致性)result_df.show()
注意
score_batch 的输入 df 有以下硬性约束:1. 不能包含
prediction 列,也不能是流式 DataFrame;2. 必须包含
feature_spec.yaml 中声明的所有 lookup_key;3. 训练时声明了
timestamp_lookup_key 的场景下,强烈建议在 df 中显式带上同名时间戳列以保证 point-in-time 一致性。若不带,SDK 会自动注入 current_timestamp() 取「当前最新可见」的特征,等同于「用今天的特征预测历史样本」,语义不严谨。执行流程 :
1. SDK 根据
model_uri 加载模型与 feature_spec.yaml。2. 根据模型签名识别需要的特征列;对未在
keys_df 中提供的列,自动通过 Feature Lookup 从特征表中查找。3. 拼装完整的输入 DataFrame 进入模型推理,输出预测结果。
在线特征表操作
发布在线特征表
除页面操作外,也可在 Notebook 中通过 SDK 的
publish_table 一键发布:fe.publish_table(catalog_name="<offline_catalog_name>", # 离线特征表所在 Catalogschema_name="<offline_schema_name>", # 离线特征表所在 Schematable_name="<offline_table_name>", # 离线特征表名online_db_name="<online_schema_name>", # 在线表所在的库online_table_name="<online_table_name>", # 在线表名# trigger 不传则默认每天 0 点(Asia/Shanghai)全量同步一次)
注意
1. 调用
publish_table 要求工作空间下至少有:① 一个运行中的数据计算资源组;② 一个 PostgreSQL 类型连接。否则会抛 RuntimeError(错误信息中带 request_id 便于定位)。2. 如需更精细的调度(如每小时整点),可通过
trigger 参数自定义同步周期。补充说明(特定版本、环境) :部分 SDK 版本或工作空间配置下,服务端会要求显式指定在线表所属的 Catalog(对应服务端
TargetPath.CatalogName)。若调用时报错 TargetPath.CatalogName 不能为空,可在上述参数基础上补传 online_catalog_name="<online_catalog_name>"(具体名称参考所在工作空间已配置的在线 Catalog)。删除在线特征表
当在线特征表不再需要时,可通过 SDK 删除:
fe.drop_online_table(name="<catalog_name>.<schema_name>.<table_name>")
注意
删除在线特征表会同时删除 PostgreSQL 中的在线表数据及对应的同步工作流,该操作不可恢复。删除前请确认没有在线推理服务正在依赖该在线表,否则服务会在下次请求时报特征查找失败。离线特征表不受影响。
命名与组织规范
统一的命名与组织规范有助于团队协作、特征复用与权限治理。建议遵循以下约定:
层级 | 命名规则 | 示例 |
Catalog | <业务域> | showcase / risk / recommend |
Schema(特征数据库) | <团队>_<场景>_db | growth_database / risk_churn_db |
特征表 | <实体>_<用途>_<版本> | orders_purchase_delivery_feature_v2 |
此外建议:
引用特征表统一使用三段式全限定名
catalog.schema.table,避免依赖默认 Catalog 带来的副作用,迁移到不同工作空间时也无需改代码。标签列建议用动词短语命名(如
order_purchase_delivery_time),避免与特征列重名。参数说明
create_table 关键参数
参数 | 说明 | 是否必填 | 默认值 |
name | 特征表的全限定名,格式 catalog.schema.table | 是 | — |
primary_keys | 主键列名,类型 Union[str, List[str]],单键传字符串、复合主键传列表 | 是 | — |
timestamp_key | 时间戳键列名(单数) | 否 | None |
engine_type | 底层表引擎, EngineTypes.ICEBERG_ENGINE 或 EngineTypes.HIVE_ENGINE | 是 | — |
df | 初始数据 Spark DataFrame,传入后可自动推断 schema 并写入首批数据 | 否 | None |
schema | 表结构(PySpark StructType)。当 df=None 时必填 | 否 | None |
catalog_name | Catalog 名称( name 未使用全限定名时指定) | 否 | None |
database_name | Schema / 数据库名称( name 未使用全限定名时指定) | 否 | None |
partition_columns | 分区列名列表 | 否 | None |
tags | 表级标签字典 | 否 | None |
description | 表描述,会显示在特征管理列表与 Catalog 详情页 | 否 | 空 |
write_table 关键参数
参数 | 说明 | 是否必填 | 默认值 |
name | 目标特征表的全限定名 | 是 | — |
df | 写入数据,Spark DataFrame(支持批 / 流式 DataFrame) | 是 | — |
mode | 写入模式, append / overwrite | 否 | append |
checkpoint_location | 流式写入时的 checkpoint 路径 | 流式写入必填 | None |
trigger | 流式写入触发器配置 | 否 | None |
get_table / read_table 参数
参数 | 说明 | 是否必填 | 默认值 |
name | 特征表名(可为全限定名,或配合 catalog_name / database_name 使用) | 是 | — |
database_name | Schema / 数据库名称 | 否 | None |
catalog_name | Catalog 名称 | 否 | None |
get_table 与 create_table 返回的均为 FeatureTable 实体(wedata.common.entities.feature_table.FeatureTable),由接口构造返回,不应由调用方直接实例化 。字段包括:name、table_id、description、primary_keys、partition_columns、features、timestamp_keys、creation_timestamp、online_stores、tags。注意
tags 字段为惰性加载,未加载时直接访问会抛 ValueError。建议先确认表已正确返回后再读取标签。set_feature_table_tag / delete_feature_table_tag 参数
参数 | 说明 | 是否必填 | 默认值 |
name | 特征表名(可为全限定名,或配合 catalog_name / database_name 使用) | 是 | — |
database_name | Schema / 数据库名称 | 否 | None |
catalog_name | Catalog 名称 | 否 | None |
key | 标签键 | 是 | "" |
value | 标签值(仅 set_feature_table_tag) | 是 | "" |
FeatureLookup 关键参数
参数 | 说明 | 是否必填 | 默认值 |
table_name | 特征表名,强烈推荐使用三段式全限定名 catalog.schema.table | 是 | — |
lookup_key | 用于匹配的主键列名(可复合主键) | 是 | — |
feature_names | 需要查找的特征列名列表;不传则查找全部非主键列 | 否 | 全部非主键列 |
timestamp_lookup_key | 用于按时间点回溯的时间戳列名 | 否 | None |
lookback_window | 时间点回溯的时间窗,类型 Optional[datetime.timedelta],配合 timestamp_lookup_key 使用 | 否 | None |
rename_outputs | 输出字段重命名映射,避免多个特征表同名列冲突 | 否 | None |
is_online | 是否为在线查找场景 | 否 | None |
online_config | 在线查找的相关配置 | 否 | None |
提示
FeatureLookup 共 9 个参数,其中包含 2 个已弃用参数(feature_name、output_name,请改用 feature_names、rename_outputs)。create_training_set 关键参数
参数 | 说明 | 是否必填 | 默认值 |
df | 主键 DataFrame,包含主键、时间戳、训练标签 | 是 | — |
feature_lookups | FeatureLookup 列表(与 feature_spec 互斥) | 否 | — |
feature_spec | 已有的特征配置(与 feature_lookups 互斥,二者择一) | 否 | — |
label | 训练标签列名 | 是 | — |
exclude_columns | 不参与训练的列名列表 | 否 | [] |
database_name | Schema / 数据库名称 | 否 | None |
catalog_name | Catalog 名称 | 否 | None |
log_model 关键参数
参数 | 类型 | 说明 | 是否必填 | 默认值 |
model | Any | 训练好的模型对象(必须使用 training_set.load_df() 返回的 DataFrame 训练) | 是 | — |
artifact_path | str | MLflow artifact 路径(如 "model") | 是 | — |
flavor | ModuleType | MLflow flavor 模块,如 mlflow.sklearn、mlflow.xgboost | 是 | — |
training_set | Optional[TrainingSet] | 训练集对象;不传则不携带 FeatureSpec(推理时不会自动 lookup) | 否 | None |
registered_model_name | Optional[str] | 模型注册名;建议用三段式 catalog.schema.model_name | 否 | None |
model_registry_uri | Optional[str] | Model Registry URI | 否 | None |
await_registration_for | int | 等待注册完成的秒数 | 否 | 300 |
infer_input_example | bool | 是否自动从 training_set.load_df() 生成 input_example | 否 | False |
**kwargs | — | 透传给对应 flavor 的 log_model | 否 | — |
注意
模型
signature 与 input_example 由 training_set.feature_spec 自动生成,无法通过参数覆盖 ,以保证 score_batch 时 lookup 列契约一致。请勿再手动 infer_signature(...) 或手动传 input_example=...。score_batch 关键参数
参数 | 说明 | 是否必填 | 默认值 |
model_uri | MLflow 模型 URI,如 runs:/<run_id>/model、models:/<name>/<version> 或 models:/<name>/<stage> | 是 | — |
df | 主键 DataFrame,须包含 feature_spec.yaml 中所有 lookup_key;不能含 prediction 列,不能是流式 DataFrame | 是 | — |
result_type | 预测结果列的数据类型,取值同 mlflow.pyfunc.spark_udf 的 result_type | 否 | "double" |
timestamp_key | 推理 DataFrame 中的时间戳列名;不传时若模型训练含 timestamp_lookup_key,SDK 会注入 current_timestamp() 取最新特征 | 否 | None |
publish_table 参数
参数 | 说明 | 是否必填 | 默认值 |
catalog_name | 离线特征表所在 Catalog | 是 | — |
schema_name | 离线特征表所在 Schema / 数据库 | 是 | — |
table_name | 离线特征表名 | 是 | — |
online_db_name | 在线表所在的库 | 是 | — |
online_table_name | 在线表名 | 是 | — |
trigger | 同步调度配置;不传则默认每天 0 点(Asia/Shanghai)全量同步一次 | 否 | None |
提示
部分 SDK 版本、工作空间配置下,服务端会额外要求
online_catalog_name(在线表所属的 Catalog,对应服务端 TargetPath.CatalogName)。仅在报错 TargetPath.CatalogName 不能为空 时按需补传,取值参考所在工作空间已配置的在线 Catalog。完整的调度参数详见 调度与触发器。
drop_table / drop_online_table 参数
参数 | 说明 | 是否必填 | 默认值 |
name | 特征表名(可为全限定名,或配合 catalog_name / database_name 使用) | 是 | — |
database_name | Schema / 数据库名称 | 否 | None |
catalog_name | Catalog 名称 | 否 | None |
相关文档
部署在线推理服务