SuperAPI AI 工具集

streamling-udf-plugin

编程与开发

查看项目

更新于 10-16 05:49

技能介绍

用途:为 streamling 编写 DataFusion 标量 UDF,让管道 SQL 能调用自定义函数,例如 SELECT truncate(body, 280) FROM stream,用于添加派生列,无需自建批处理管道或 process_batch。

前提:需先掌握 streamling-plugin-basics(crate 设置与注册);注册后调用方式见 sql-transform。目标 API 为 DataFusion 49 / Arrow 55(invoke_with_args + ScalarFunctionArgs);若 Cargo.toml 固定较旧版本,方法可能是 invoke(&self, args: Vec<ColumnarValue>)。

主要能力与用法:两种编写形式——用 struct 实现 ScalarUDFImpl(含 Default),通过 register_plugin_udf!(MyFunc) 注册,类型安全、推荐;或用 create_udf(..) 返回 ScalarUDF 的闭包工厂,通过 register_plugin_udf_fn!(create_my_func) 注册。同一 cdylib 可与其他 source/sink/transform/preprocessor 共存,每个 crate 只需在 lib.rs 底部调用一次 init_plugin_with_async_runtime!()。

关键点:实现 name、signature、return_type 与 return_field_from_args(二者 DataType 需一致);invoke_with_args 中通过 args.args 获取 Vec<ColumnarValue>,数组为常态,字面量需用 to_array_of_size(len) 广播;返回 ColumnarValue::Array 或 Scalar。参数校验与类型错误应返回 DataFusionError::Plan,panic 会中止整个查询。必须显式传播空值,逐行检查 is_null(i) 并 append_null;字符串按 chars() 切分避免 UTF-8 panic;用 builder 整数组构建并预分配容量。Volatility 可选 Immutable/Stable/Volatile,纯函数用 Immutable。

限制:资料未提供收费、平台或其他未述信息;具体 API 版本差异需按所用 DataFusion 适配。