Presto中UDF的使用 -- Plugin实现方式

本文主要是记录一下Presto实现Udf的过程,话不多说,下面见详细使用步骤

1. 创建Maven工程,添加Maven依赖(ps:创建maven工程的步骤省略,可以自行查找案例)






    4.0.0

    com.cxk

    dssp-udfs

    1.0-SNAPSHOT

    

        0.215

        0.15

        0.3

        18.0

    

    

        

        

            com.facebook.presto

            presto-spi

            ${presto.version}

            provided

        

        

            com.facebook.presto

            presto-main

            ${presto.version}

        

        

            io.airlift

            slice

            ${slice.version}

        

        

            com.google.guava

            guava

            ${guava.version}

        

        

            xerces

            xercesImpl

            2.9.1

        

    

    

        

            

                org.apache.maven.plugins

                maven-release-plugin

                2.5.1

            

            

                maven-assembly-plugin

                

                    

                        jar-with-dependencies

                    

                

                

                    

                        make-assembly

                        package

                        

                            single

                        

                    

                

            

        

    



2.编写Function,注意要用注解声明Function的相关信息,并且 参数也要注解声明


package com.cxk.functions;

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 LowerFunction {

    @ScalarFunction("lower_cxk")                --查询中使用到的function名字

    @Description("hive to_date function")     --show functions 的时候显示的function备注

    @SqlType(StandardTypes.VARCHAR)   --返回值类型

    public static Slice lower_cxk(@SqlType(StandardTypes.VARCHAR) Slice input) {

        String argument = input.toStringUtf8();

        return Slices.utf8Slice(argument.toLowerCase());

    }

}

3.编写Plugin,主要是注册Function


package com.cxk.plugin;

import com.facebook.presto.spi.Plugin;

import com.google.common.collect.ImmutableSet;

import com.cxk.functions.*;

import java.util.Set;

public class DsspPlugin implements Plugin {

    public Set> getFunctions()

    {



        return ImmutableSet.>builder()

                .add(LowerFunction.class)

                .build();

    }

}

4.编写配置文件,Presto 会使用ServiceLoader 加载Plugin信息,所以需要一下步骤实现配置

在resources目录下面添加 META-INF/service目录  

新建一个文件,命名为com.facebook.presto.spi.Plugin  

在文件中添加以下内容:com.cxk.plugin.DsspPlugin  

5.配置打包,在Presto Server配置的Plugin目录下面新建目录 cxk_udfs, 将Jar包放入,重启Server即可

你可能感兴趣的:(Presto中UDF的使用 -- Plugin实现方式)