Scalar Python UDF注册参数
注册Scalar Python UDF的作用是将一个原始的Python函数注册进数据库中。
不管是显式注册还是隐式注册,对于注册Python类型的Scalar 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执行。