注册Scalar UDF概览
注册Scalar UDF的含义是在后端数据库包含指定的UDF,并在注册后返回在ibis DataFrame中可以操作的UDF算子。
注册Scalar UDF返回的值是DataFrame中的一个UDF算子。后续这个UDF算子可以被多个DataFrame表达式多次调用。
注册Scalar UDF总体上来说分为两种方式:显式注册和隐式注册。
注册方式 |
含义 |
是否依赖会话对象 |
是否侵入式添加注册逻辑 |
适用场景 |
参考 |
---|---|---|---|---|---|
显式注册 |
代码中明确指定Scalar UDF的注册信息 |
是 |
是 |
如果用户希望明确控制注册时间,允许侵入式添加注册逻辑,或对同一个Backend连接下的Scalar UDF注册和使用分离有要求。 |
|
隐式注册 |
运行时自动发现并注册Scalar UDF |
否 |
否 |
如果用户希望无侵入式的注册Scalar UDF,且对同一个Backend连接下的Scalar UDF注册和使用分离无要求。 |
不管是显式注册还是隐式注册,对于不同的Scalar UDF类型,注册的含义有所不同,详情参见下表:
Scalar UDF类型 |
含义 |
参考 |
---|---|---|
python |
将一个原始的Python函数或者类注册进数据库中。 |
|
builtin |
获得数据库已存在的函数的句柄,无实际注册的操作。 |
如果注册传入的是Python类,那么对于__init__、process、 __del__ 3个实例方法有特殊的含义认定,详情请参见下表;其他的Python类和实例方法不做限制,用户可以任意添加。
Python Class方法 |
是否必须 |
参数 |
含义 |
适用场景 |
---|---|---|---|---|
__init__(self, *args, **kwargs) |
否 |
通过with_arguments方法传入参数,只允许传入标量Scalar。 |
UDF的构造方法。 |
初始化UDF属性(如保存参数、打开文件、建立连接等)。 |
process(self, *args, **kwargs) |
是 |
通过UDF算子传入参数,可以传入标量Scalar和列名Column。 |
UDF的业务逻辑方法入口。 |
UDF处理数据、执行计算。 |
__del__(self) |
否 |
不支持传入参数。 |
UDF的析构方法。 |
UDF资源清理(如关闭文件、断开网络连接等)。 |