WASM (WebAssembly) UDF 提供了一种在 Doris 中使用 WebAssembly 编写自定义函数的方式。与 Java UDF 相比,WASM UDF 有一些独特的优势和限制:
CREATE FUNCTION name ([,...]) [RETURNS] rettype PROPERTIES (["key"="value"][,...])
说明:
symbol表示的是包含 UDF 类的类名,这个参数是必须设定的。file表示的包含用户 UDF 的 wat 文件,这个参数是必须设定的。type表示的 UDF 调用类型,默认为 Native,使用 WASM UDF 时传 WASM_UDF。always_nullable表示的 UDF 返回结果中是否有可能出现 NULL 值,是可选参数,默认值为 true。dbName.funcName。当 dbName 没有明确指定的时候,就是使用当前 session 所在的 db 作为 dbName。示例:
CREATE FUNCTION wasm_udf_add_one(int) RETURNS int PROPERTIES ( "file"="file:///path/to/wasm-udf-demo.wat, "symbol"="add", "always_nullable"="true", "type"="WASM_UDF" );
目前还暂不支持 UDTF
CREATE FUNCTION wasm_udf_add_one(int) RETURNS int PROPERTIES ( "file"="file:///path/to/wasm-udf-demo.wat, "symbol"="add", "always_nullable"="true", "type"="WASM_UDF" );
(module (func $add (param i32) (param i32) (result i32) (local.get 0) (local.get 1) (i32.add) ) (export "add" (func $add)) )
用户使用 UDF 必须拥有对应数据库的 SELECT 权限。
UDF 的使用与普通的函数方式一致,唯一的区别在于,内置函数的作用域是全局的,而 UDF 的作用域是 DB 内部。当链接 session 位于数据内部时,直接使用 UDF 名字会在当前DB内部查找对应的 UDF。否则用户需要显示的指定 UDF 的数据库名字,例如 dbName.funcName。
当你不再需要 UDF 函数时,你可以通过下述命令来删除一个 UDF 函数, 可以参考 DROP FUNCTION。