更新时间:2026-10-16 GMT+08:00
分享

创建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}")

相关文档