以大小写转换为例
写个插件
public class PrestoUdfPlugin implements Plugin {
@Override
public Set<Class<?>> getFunctions() {
return ImmutableSet.<Class<?>>builder()
// 添加插件class
.add(MyFunctions.class)
.build();
}
}
写自定义函数
import com.facebook.presto.spi.function.Description;
import com.facebook.presto.common.type.StandardTypes;
import com.facebook.presto.spi.function.Description;
import com.facebook.presto.spi.function.ScalarFunction;
import com.facebook.presto.spi.function.SqlType;
import io.airlift.slice.Slice;
import io.airlift.slice.Slices;
public class MyFunctions {
@ScalarFunction("my_upper") // 固定参数,表示函数名的意思,也就我们在使用Presto的时候用的函数名
@Description("我的大小写转换函数") // 函数的注释
@SqlType(StandardTypes.VARCHAR) // 表示数据类型
public static Slice toUpper(@SqlType(StandardTypes.VARCHAR) Slice input) {
// 将获取到的数据转换大写
String s = input.toStringUtf8().toUpperCase();
// 在转换后的数据放入内存返回
return Slices.utf8Slice(s);
}
}
在resources
下创建目录,注意META-INF
是父目录,services
是子目录,只是idea合并显示了,不是说文件名里面有点.
然后创建文件com.facebook.presto.spi.Plugin
文件内容为插件内的路径,比如这里为
com.xx.xx.presto.PrestoUdfPlugin
利用maven
打包成jar
包上传到presto
安装目录下的plugin
目录,注意依赖也必须打包进去
之后重启presto
,没启动的用start
,已经启动的用restart
命令.
[root@mypc01 presto]# ./bin/launcher restart
Started as 72838
jps
命令查看确认有PrestoServer
进程,表示启动成功.
进入presto
命令行就可以使用自定义函数了
[root@mypc01 presto]# ./presto --server 192.168.xx.101:8080 --catalog hive
>select my_upper('abc');
>ABC
参考
Functions — Trino 351 Documentation
https://trino.io/docs/current/develop/functions.html