Presto-カスタムUDFインスタンス(スカラー関数)

4914 ワード

背景紹介
この記事では主にPrestoにおけるUDFの開発について説明します.この例のカスタムメソッドの論理は簡単で,文字列のように伝達され,文字列の前にHelloを組み立てるのは,自分でScalar Functionを実現する方法を説明するためである.具体的な手順およびコード1を以下に示す.Mavenエンジニアリングpomを作成する.xml


    4.0.0
    presto-plugin
    com.levin.presto.plugin
    plugin_test
    1.0
    
        com.facebook.presto
        presto-root
        0.187
    
    
        0.187
    
    
        
            com.facebook.presto
            presto-spi
            ${presto.verison}
            provided
        
        
            com.google.guava
            guava
        
        
            com.fasterxml.jackson.core
            jackson-annotations
            provided
        

        
            io.airlift
            slice
            provided
        

        
            io.airlift
            units
            provided
        

        
            org.openjdk.jol
            jol-core
            provided
        
    
    
    
        
            
                com.mycila
                license-maven-plugin
                
                    true
                
            
            
                pl.project13.maven
                git-commit-id-plugin
                
                    true
                
            
            
                org.gaul
                modernizer-maven-plugin
                
                    true
                
            
        
    


HelloFunction.JAvaはメソッドの実際の論理を定義するために使用されます
package com.levin.presto.plugin;

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 io.airlift.slice.Slices;

public class HelloFunction {
    @Description("Hello Function")
    @ScalarFunction("hello") //    
    @SqlType(StandardTypes.VARCHAR) //    
    public static Slice hello(@SqlType(StandardTypes.VARCHAR) Slice str) {
        String value=str.toStringUtf8();
        return Slices.utf8Slice("Hello "+value);
    }
}

HelloFunctionPlugin.JAvaはPluginコレクションへの統合登録に使用されます
package com.levin.presto.plugin;

import com.facebook.presto.spi.Plugin;
import com.google.common.collect.ImmutableSet;

import java.util.Set;

public class HelloFunctionPlugin implements Plugin {
    @Override
    public Set> getFunctions() {
        return ImmutableSet.>builder().add(HelloFunction.class).build();
    }
}

mvnパッケージコマンド
mvn clean package -Dcheckstyle.skip=true -Dcheckstyle.skipExec=true

targetの下のplugin_test-1.0.jar%PRESTO_へコピーHOME%/plugin/plugin_test/下、guava-21.0をコピーする.JArから上への経路でPS:plugin_testは工事名と一致することが望ましい
Plugins must be installed on all nodes in the Presto cluster (coordinator and workers). Prestoを起動し、クライアントを使用してクエリーselect hello(「levin」)を送信します.
presto> select hello('levin');
    _col0    
-------------
 Hello levin 
(1 row)

Query 20181108_095033_00002_9rg6y, FINISHED, 1 node
Splits: 17 total, 17 done (100.00%)
0:00 [0 rows, 0B] [0 rows/s, 0B/s]

OKこれでカスタムスカラー関数が完成しました.
集約関数など他の複雑な関数定義については、次のリンクを参照してください.
https://prestodb.io/docs/current/develop/spi-overview.html https://prestodb.io/docs/current/develop/functions.html https://github.com/prestodb/presto/tree/master/presto-teradata-functions