presto自定義UDF函式
阿新 • • 發佈:2021-01-07
以大小寫轉換為例
寫個外掛
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
命令.
[[email protected] presto]# ./bin/launcher restart
Started as 72838
jps
命令檢視確認有PrestoServer
程序,表示啟動成功.
進入presto
命令列就可以使用自定義函數了
[[email protected] presto]# ./presto --server 192.168.10.101:8080 --catalog hive
>select my_upper('abc');
>ABC
參考
Functions — Trino 351 Documentation
https://trino.io/docs/current/develop/functions.html