更新时间:2025-07-08 GMT+08:00
分享

Scalar Python UDF注册参数

注册Scalar Python UDF的作用是将一个原始的Python函数注册进数据库中。

不管是显式注册还是隐式注册,对于注册Python类型的Scalar UDF,目前都接受用户传入以下参数:

表1 Scalar Python UDF注册参数

注册参数

含义

类型

默认值

name

指定UDF实际数据库中存储名称

str | None

None

database

指定UDF所在的LakeFormation数据库

str | None

None

fn

指定UDF原始的Python函数

Callable

None

signature(目前不可用)

指定UDF函数签名和返回值类型

ibis.common.annotations.Signature | None

None

replace(目前不可用)

指定UDF是否支持就地修改

bool

False

temporary(目前不可用)

指定UDF是否会话级别的生命周期

bool

False

if_not_exist(目前不可用)

指定UDF是否跳过已存在报错

bool

False

strict

指定UDF是否自动过滤NULL值

bool

True

volatility

指定UDF稳定性

VolatilityType.VOLATILE | VolatilityType.STABLE | VolatilityType.IMMUTABLE

VolatilityType.VOLATILE

runtime_version(目前不可用)

指定UDF执行的Python版本

str

sys.version_info

imports

指定UDF依赖的外部代码文件

List[str]

None

packages

指定UDF依赖的Python模块

List[Union[str, module]]

None

register_type(目前只支持RegisterType.OBS)

指定UDF的注册形式

RegisterType.TEXT | RegisterType.OBS

RegisterType.OBS

comment

指定UDF的用户注释

str | None

None

注意事项:

  • 对于import参数,只支持用户传入当前Python函数所在的.py文件同级目录或子目录下的文件路径。
  • 对于fn参数,如果fn不在当前注册Scalar Python UDF的.py文件中,那么需要同时在imports参数中添加fn定义的文件路径,例如:
    from process import outer
    
    con = ibis.fabric.connect(...)
    
    # 注册UDF
    udf = con.udf.python.register(
        outer(), #从外部引入的fn
        imports=["process.py"] #为fn添加文件路径
    )
  • 对于signature参数,目前不允许用户传入,只支持参数/返回值类型自动推断,详情请见signature参数的类型推断
  • 对于volatility参数,3个枚举类型的含义是:
    • VolatilityType.VOLATILE:函数结果可能在任何时候都变化
    • VolatilityType.STABLE:函数对于固定输入其结果在一次扫描里不变
    • VolatilityType.IMMUTABLE:函数对于相同的输入总是输出相同的结果

    该参数和SHIPPABLE共同影响函数下推执行,具体来说:对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行;对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。

相关文档