美文网首页
Presto中UDF的使用 -- Plugin实现方式

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

作者: chenxk | 来源:发表于2019-04-17 11:01 被阅读0次

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

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


<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cxk</groupId>

    <artifactId>dssp-udfs</artifactId>

    <version>1.0-SNAPSHOT</version>

    <properties>

        <presto.version>0.215</presto.version>

        <slice.version>0.15</slice.version>

        <presto.plugin.version>0.3</presto.plugin.version>

        <guava.version>18.0</guava.version>

    </properties>

    <dependencies>

        <!-- https://mvnrepository.com/artifact/io.prestosql/presto-spi -->

        <dependency>

            <groupId>com.facebook.presto</groupId>

            <artifactId>presto-spi</artifactId>

            <version>${presto.version}</version>

            <scope>provided</scope>

        </dependency>

        <dependency>

            <groupId>com.facebook.presto</groupId>

            <artifactId>presto-main</artifactId>

            <version>${presto.version}</version>

        </dependency>

        <dependency>

            <groupId>io.airlift</groupId>

            <artifactId>slice</artifactId>

            <version>${slice.version}</version>

        </dependency>

        <dependency>

            <groupId>com.google.guava</groupId>

            <artifactId>guava</artifactId>

            <version>${guava.version}</version>

        </dependency>

        <dependency>

            <groupId>xerces</groupId>

            <artifactId>xercesImpl</artifactId>

            <version>2.9.1</version>

        </dependency>

    </dependencies>

    <build>

        <plugins>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-release-plugin</artifactId>

                <version>2.5.1</version>

            </plugin>

            <plugin>

                <artifactId>maven-assembly-plugin</artifactId>

                <configuration>

                    <descriptorRefs>

                        <descriptorRef>jar-with-dependencies</descriptorRef>

                    </descriptorRefs>

                </configuration>

                <executions>

                    <execution>

                        <id>make-assembly</id>

                        <phase>package</phase>

                        <goals>

                            <goal>single</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

        </plugins>

    </build>

</project>

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<Class<?>> getFunctions()

    {



        return ImmutableSet.<Class<?>>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实现方式

      本文链接:https://www.haomeiwen.com/subject/omugwqtx.html