1. 程式人生 > 其它 >presto自定義UDF函式

presto自定義UDF函式

技術標籤:prestoprestoudf

以大小寫轉換為例
寫個外掛

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