Skip to main content

函数管理

info

该功能仅专业版、旗舰版支持。

函数管理是指标平台提供的用于对自定义指标sql编辑时用到的自定义函数进行管理的功能。在此页面可创建自定义函数,支持按函数名称搜索。针对指标加工中平台目前无法满足的复杂加工计算,可通过上传自定义函数zip包的方式支持。上传成功后,自定义函数将被加载到trino服务中,在新增自定义指标写sql时可直接使用该函数。

image-20230626175458334

tip

函数管理目前仅支持上传trino自定义函数。数栈trino359版本或其他开源trino版本目前暂不支持函数管理功能,仅有数栈trino385版本支持该功能。

Trino UDF

代码示例

在本地环境中按照Trino的UDF框架编写代码实现函数,示例代码如下:

  1. 编写插件
package io.trino.plugin.example.udf;
import com.google.common.collect.ImmutableSet;
import io.trino.spi.Plugin;
import java.util.Set;

public class PrestoUdfPlugin implements Plugin {
@Override
public Set<Class<?>> getFunctions() {
return ImmutableSet.<Class<?>>builder()
// 添加插件class
.add(ExampleFunction.class)
.build();
}
}
  1. 编写自定义函数
package io.trino.plugin.example.udf;
import io.airlift.slice.Slice;
import io.airlift.slice.Slices;
import io.trino.spi.function.Description;
import io.trino.spi.function.ScalarFunction;
import io.trino.spi.function.SqlType;
import io.trino.spi.type.StandardTypes;

public class ExampleFunction {
@ScalarFunction("example_upper") // 固定参数,在使用TrinoSQL的时候使用的函数名
@Description("大小写转换函数") // 函数的注释
@SqlType(StandardTypes.VARCHAR) // 表示数据类型
public static Slice toUpper(@SqlType(StandardTypes.VARCHAR) Slice input) {
// 将获取到的数据转换大写
String s = input.toStringUtf8().toUpperCase();
// 在转换后的数据放入内存返回
return Slices.utf8Slice(s);
}
}

将上述代码编译成zip包。

上传自定义函数

在「函数管理」中新增自定义函数,填写函数名称,上传zip包资源。此处函数名称只是起到注释的作用,实际编写sql时用到的函数名是zip包中函数名。

image-20230626203539261

在sql中使用函数

在sql编写时,编写example_upper()以使用函数。

image-20230626202815626

点击「测试」可查看运行结果。