更新时间:2025-09-18 GMT+08:00

注册Scalar UDF概览

注册Scalar UDF的含义是在后端数据库包含指定的UDF,并在注册后返回在ibis DataFrame中可以操作的UDF算子。

注册Scalar UDF返回的值是DataFrame中的一个UDF算子。后续这个UDF算子可以被多个DataFrame表达式多次调用。

注册Scalar UDF总体上来说分为两种方式:显式注册和隐式注册。

表1 注册Scalar UDF方式

注册方式

含义

是否依赖会话对象

是否侵入式添加注册逻辑

适用场景

参考

显式注册

代码中明确指定Scalar UDF的注册信息

如果用户希望明确控制注册时间,允许侵入式添加注册逻辑,或对同一个Backend连接下的Scalar UDF注册和使用分离有要求。

Scalar UDF显式注册语法

隐式注册

运行时自动发现并注册Scalar UDF

如果用户希望无侵入式的注册Scalar UDF,且对同一个Backend连接下的Scalar UDF注册和使用分离无要求。

Scalar UDF隐式注册语法

不管是显式注册还是隐式注册,对于不同的Scalar UDF类型,注册的含义有所不同,详情参见下表:

表2 注册Scalar UDF含义

Scalar UDF类型

含义

参考

python

将一个原始的Python函数或者类注册进数据库中。

Scalar Python UDF注册参数

builtin

获得数据库已存在的函数的句柄,无实际注册的操作。

Scalar Builtin UDF注册参数

如果注册传入的是Python类,那么对于__init__、process、 __del__ 3个实例方法有特殊的含义认定,详情请参见下表;其他的Python类和实例方法不做限制,用户可以任意添加。

表3 注册Python Class时的特殊实例方法

Python Class方法

是否必须

参数

含义

适用场景

__init__(self, *args, **kwargs)

通过with_arguments方法传入参数,只允许传入标量Scalar。

UDF的构造方法。

初始化UDF属性(如保存参数、打开文件、建立连接等)。

process(self, *args, **kwargs)

通过UDF算子传入参数,可以传入标量Scalar和列名Column。

UDF的业务逻辑方法入口。

UDF处理数据、执行计算。

__del__(self)

不支持传入参数。

UDF的析构方法。

UDF资源清理(如关闭文件、断开网络连接等)。