StarRocks UDF 需求搜集与反馈

自定义udf和已有udf重名,但是类型不同的时候,如下:

drop function fx_temp.date_add(string,bigint,string);
CREATE FUNCTION fx_temp.date_add(string,bigint,string)
RETURNS string
properties (
“symbol” = “cn.com.xxx.sr.udf.date.DateAddUdf”,
“type” = “StarrocksJar”,
“file” = “file:///data1/hadoop/soft/package/StarRocks-2.2.2/udf/lib/xxx-sr-udf-1.0-SNAPSHOT.jar”
);

此时如果使用以下命令,会按照已有udf的参数去校验,报出了参数不匹配的错误:
use fx_temp;
select date_add(‘day’,3,‘2022-09-31’);
image

调用如下操作又是正常的:
select fx_temp.date_add(‘day’,3,‘2022-09-31’);

这个正常应该有个 函数名+参数类型的优先匹配机制把。

第三点确实很费事,不如hive好使。我都写个接口,直接实例下所有库同时更新。

这个算一个bug,可以提一个issue

希望支持C++版本,doris都支持C++版本

后面可以考虑支持,但是目前StarRocks 迭代比较快C++的 ABI/API 不能保证稳定。很容易导致升级后需要重新编写。所以如果是自己想实现C++的UDF可以尝试编写builtin函数的方式做扩展开发。

有没有计划支持类似MySQL的自定义函数的计划?比如MySQL中可以用以下语句创建
DELIMITER $$

USE database$$

DROP FUNCTION IF EXISTS GetCodeByNM$$

CREATE DEFINER=xxx@% FUNCTION GetCodeByNM(cname VARCHAR(255)) RETURNS VARCHAR(2048) CHARSET utf8mb4
BEGIN
DECLARE retName VARCHAR(255) DEFAULT ‘’;
SELECT xxx INTO retName FROM table_name WHERE xxx = cname LIMIT 1;
IF retName IS NULL || retName =’’ THEN
SET retName=‘123’;
END IF;
RETURN retName;
END$$

DELIMITER ;

1赞

你好,目前在尝试编写builtin函数的方式扩展开发,有什么相关文档吗,或者demo之类的

这几天我写一下怎么添加 scalar builtin函数

好的,尤其是聚合函数,目前FE搭建成功了,be开发环境搭建有点困难,希望有个文档吧

1赞

你好,新版本udf是否支持jdk11,目前2.3.3版本jdk11的udf直接导致be crash

可以详细说下吗,发下 be.out的crash堆栈?

我们先自己测试下,再给你个回复

be jdk改1.8,udf jar包用jdk 1.8编译运行正常
be jdk改11,udf jar包用jdk 11编译be直接crash,堆栈如下:

也尝试过在jdk11下编译starrock,不过还是一样

好的,我们Fix下。

你好,能提供一下builtin的文档吗?

文档中的udaf太简单了。
如果想实现一个类似 ARRAY_AGG 的udaf,应该怎么构造state? serializeLength怎么写?

https://github.com/StarRocks/starrocks/tree/main/java-extensions/udf-examples/src/main/java/com/starrocks/example/udf 这里有变长的

期望有类似clickhouse对多行bitmap求交集的函数:groupBitmapAndState