Presto UDF开发

版本说明

  1. Presto 0.227

详细步骤

  1. 创建Maven工程,在pom文件中引入presto-spi和guava依赖,指定打包插件
    在这里插入图片描述
    在这里插入图片描述

  2. 创建类并编写UDF函数
    Presto 中函数分为三种:scalar,aggregation 和 window 。此处以Nginx日志中时间字段进行标准格式化为例,使用的是scalar即标量函数,它类似于Hive中的UDF。
    在这里插入图片描述
    @ScalarFunction(“format_nginx_time”) 该注解用于指定函数名称,即在Presto客户端查询时使用的函数名
    @Description(“tranform time in nginx log to standard format”) 该注解用于对函数功能进行描述
    @SqlType(StandardTypes.VARCHAR) 该注解用于指定函数的返回类型。
    另外对传入的参数也需要使用SqlType注解指定入参类型。
    formatNginxTime函数中实现具体的转换逻辑,Presto中没有String类型,需要使用它内部定义的序列化方式,因此该函数的返回值类型使用Slice

  3. 进行插件注册
    在这里插入图片描述
    创建UDFPlugin类(名称随意),实现Plugin接口,并重写getFunctions方法,将刚刚编写的UDF函数对应的类加入其中。

  4. 在src/main/resources/META-INF/services 中新建名为 com.facebook.presto.spi.Plugin 的文本文件,内容就是之前实现 Plugin 接口的类名
    在这里插入图片描述

  5. 在Presto Server的plugin目录下创建一个新的目录presto-udf(名称随意),把项目打成jar包,上传到presto-udf目录,并且拷贝一份guava的jar包到该目录下
    在这里插入图片描述
    在这里插入图片描述
    注意:如果Presto集群有3个节点,那么每个节点都需要进行第5步操作。因为实际的查询任务由Presto中的Worker完成,必须保证每个Worker节点都能找到UDF。

  6. 重启所有的Presto Server,查看日志,如果PluginManager成功加载了上面的jar包,并且注册了UDF函数,就表示部署成功。为了进一步验证,可以在Presto Client中使用show functions命令查看函数是否成功注册。
    在这里插入图片描述

  7. 使用UDF
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值