[16]-presto UDFs開発-プラグイン注入式

7581 ワード

#Presto UDFs開発例GitHub presto-udfs開発はHIVE UDFsの一部をサポートしています.
  • gitコードpresto-udfs、新しいテストudf、UdfTest文字列strを入力してstrを返しますhjw
  • package com.qubole.presto.udfs.udfLearn;
    
    import com.facebook.presto.spi.function.Description;
    import com.facebook.presto.spi.function.ScalarFunction;
    import com.facebook.presto.spi.function.SqlType;
    import com.facebook.presto.spi.type.StandardTypes;
    import io.airlift.slice.Slice;
    
    import static io.airlift.slice.Slices.utf8Slice;
    
    public class UdfTest
    {
      private UdfTest() {}
    
      @Description("This is a udf test, return a result equals concat(input,'_hjw')")
      @ScalarFunction("udf_test")
      @SqlType(StandardTypes.VARCHAR)
      public static Slice locateString(@SqlType(StandardTypes.VARCHAR) Slice input)
      {
        StringBuilder result = new StringBuilder();
        result.append(input).append("_hjw");
        return utf8Slice(result.toString());
      }
    }
    
  • パッケージjar
    mvn package 
    
  • Pretoルートディレクトリpluginディレクトリの下にudfsフォルダ
  • を新規作成
    /presto-server-0.191/plugin$ ls
    accumulo                geospatial              memory                  presto-thrift           sqlserver
    atop                    hive-hadoop2            ml                      raptor                  teradata-functions
    blackhole               jmx                     mongodb                 redis                   tpcds
    cassandra               kafka                   mysql                   redshift                tpch
    example-http            localfile               postgresql              resource-group-managers udfs
    
  • 梱包されたudfs-2.0.2-SNAPSHOT.jarレプリケーション
  • /plugin/udfs$ ls
    udfs-2.0.2-SNAPSHOT.jar
    
  • 再起動サービス(ここでは単機で、自機サービスのみを起動すればよい、クラスタは を参照)
  • .
    /bin$ ./launcher start
    Started as 790
    
  • CLI
  • を起動する
    Presto/CLI/presto$ ./presto --server localhost:8080 --catalog hive --schema default
    presto:default>
    presto:default> select udf_test('str')
                 -> ;
                           _col0
    ---------------------------------------------------
     Slice{base=[B@6d9ac4da, address=16, length=3}_hjw
    (1 row)
    Query 20180212_052513_00002_ntdq9, FINISHED, 1 node
    Splits: 17 total, 17 done (100.00%)
    0:00 [0 rows, 0B] [0 rows/s, 0B/s]
    

    戻り値のタイプに問題があるので、しばらく置いておきます...空いてからタイプの問題をチェックします
    Slice{base=[B@6d9ac4da, address=16, length=3}_hjw
    #参照ディレクトリ
  • presto-udfs
  • Plugging in Presto UDFs
  • Function not registered error #3967
  • spi-overview