创建UDF
将一个UDF(逐行处理输入列、返回单值)注册到LakeFormation。注册流程:类型推断->打包->上传OBS->写入LakeFormation元数据。若LakeFormation注册失败,会自动回滚已上传的OBS包。
前提条件
- 已完成SDK安装。具体操作,请参见Catalog SDK获取与安装。
- 已准备好UDF可调用对象(函数、函数类或类实例),并标注了类型注解。
函数签名
client.create_udf(
udf, /, *,
database=None,
name,
signature=None,
imports=None,
runtime_env=None,
description=None,
pretty_name=None,
is_strict=True,
volatility="VOLATILE",
is_batch=False,
batch_size=None,
cpu_arch=None,
cpus=None,
memory=None,
device_type=None,
devices=None,
) -> Function 参数说明
| 参数 | 是否必选 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| udf | 是 | Any(位置参数) | - | UDF可调用对象(函数或可调用类)。 |
| database | 否 | str | None | default_database | 目标数据库名;为None时使用客户端默认数据库。 |
| name | 是 | str | - | 函数名,须以字母开头,仅含字母、数字、下划线,长度为3~128。 |
| signature | 否 | Signature | None | None | 显式函数签名;为None时由UDF注解自动推断。 关于signature的更多信息,请参见signature说明。 |
| imports | 否 | str | Iterable[str] | None | None | 需要打入UDF包的文件/目录路径或URL列表。 |
| runtime_env | 否 | str | Mapping | None | None | 运行时环境配置(python_version、pypi依赖等),可传JSON字符串或字典。 关于runtime_env的更多信息,请参见runtime_env说明。 |
| description | 否 | str | None | None | 函数描述。 |
| pretty_name | 否 | str | None | None | 展示名,为None时使用name。 |
| is_strict | 否 | bool | True | 函数是否严格(输入为NULL时是否直接返回NULL)。 |
| volatility | 否 | str | “VOLATILE” | 函数易变性:IMMUTABLE/STABLE/VOLATILE。 |
| is_batch | 否 | bool | False | 是否启用批量处理模式。 |
| batch_size | 否 | int | None | None | 批量处理每批大小;is_batch=True 时建议提供,须为正整数。 |
| cpu_arch | 否 | str | None | None | CPU架构,取值arm或x86。 |
| cpus | 否 | float | None | None | CPU核数,最小0.33。 |
| memory | 否 | int | None | None | 内存大小,单位MB,最小 1。 |
| device_type | 否 | str | None | None | 设备类型,例如npu、gpu。 |
| devices | 否 | float | None | None | 设备数量,需为正数。 |
返回值
返回Function对象,其中包含LakeFormation分配的version_id、resource_uris(OBS包地址)及parameters(签名、运行时环境等元数据)。
示例代码
- 若未提供signature,SDK会通过infer_signature从UDF的类型注解推断签名。类形式UDF取其__call__ 方法。
- 类定义形式UDF会抽取构造函数定义(ConstructorDef)并记录class_name,便于Aura引擎定位类。
- 类实例形式UDF通过cloudpickle序列化实例,class_name取自实例类型。
# 1. 定义带类型注解的UDF
def to_celsius(fahrenheit: float) -> float:
return (fahrenheit - 32.0) * 5.0 / 9.0
# 2. 注册到LakeFormation
func = client.create_udf(
udf=to_celsius,
name="to_celsius",
description="华氏度转摄氏度",
runtime_env={"python_version": "3.11", "pypi": []},
)
print(f"Registered: {func.function_name}, version={func.version_id}")