roya+mysql_PrestoDB-2021最新版自定义函数开发总结

一、前言

网上教程版本较老

网上许多prestodb自定义函数开发的博客都是比较老的版本与最新的版本有差异

presto有两个版本, 这里总结的是prestodb

facebook维护的prestodb,包名com.facebook.presto

另一个独立发展的版本prestoSQL,包名io.prestosql

二、安装prestodb本地环境,连接mysql

安装教程不做赘述,参见这个博客总结 prestodb本地环境安装

三、prestodb自定义函数插件开发

sql中有聚合函数跟一般函数,这里做一般函数的demo,即RSA非对称加密函数开发

prestodb自带函数库不支持对称加密和非对称加密,因此要进行二次开发

1、代码开发

由于我安装的prestodb是最新版本的,所以参照github官方库的demo进行编写

https://github.com/prestodb/presto/blob/master/presto-teradata-functions/src/main/java/com/facebook/presto/teradata/functions/TeradataStringFunctions.java#L63

5f015d6be3648c153952170701884822.png

在resources下创建META-INF/services/com.facebook.presto.spi.Plugin,文本内容为插件导入实现类的路径org.example.presto.RSAEncryptFuncti

onsPlugin

7415933d8ad40f762e3f47efc0da96c2.png

4d86cab11d88d7f5487fb81c14481a0f.png

入参出参都需要用注解标识@ScalarFunction、@SqlType,String类型传输都需要用Slice类包装,否则使用时prestodb是无法接收输入的

018892f8c969a598219088f7022d3731.png

2、测试开发的插件

如果依赖了jdk包和prestodb包以外的第三方包的话,需要将依赖都打包进插件jar中,否则prestodb重启加载插件jar时会报错找不到对应的class

如图所示,这样build出来的jar才会将依赖的第三方包一起打包进jar,无第三方包则忽略

7387185c1f5b307bf79bdf09735ac0d3.png

2f41ded7680df40209b4ca2f42bb4295.png

c49c1a79641f5381bf3a5be1f22a6cb2.png

b7976c05f93a17e0342f3d3c15337545.png

将插件jar拷贝到prestodb的插件目录的自定义目录下,

/opt/presto-server-0.245.1/plugin/

/opt/presto-server-0.245.1/plugin/prestodb-udf-2021/prestodb-udf-2021.jar

重启prestodb

nohup ./bin/launcher run > run.log &

cat run.log|grep 'prestodb-udf-2021'

025428128e46444effdf2146dc5216cd.png

这个日志表示加载成功了

启动客户端测试自定函数, cli包自行官网下载

java -jar presto-cli-0.245.1-executable.jar --server localhost:8080 --catalog mysql --schema sys

1.生成key

d201d46b96c49d040f0dca87cb283536.png

2.公钥加密,china no.1

公钥

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIdQMkoYhNj18xHuNqjoek+ZPztonY5F2Tw5QKmfM6oQawh81ut6ZpVgGqKK9HV7CKFx+AsjjalvcHkrQuzusmx2sHtjv6LPmpVZM60qgQ00rz5+uPtVe5E51Pz8CxBOdN296yfeNdcjsdw8sNPlVtVv97gXHCVVbf0mdskk1GxwIDAQAB

3.私钥解密

a0b4297c73456a5728a2a74c6b544791.png

私钥

MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMh1AyShiE2PXzEe42qOh6T5k/O2idjkXZPDlAqZ8zqhBrCHzW63pmlWAaoor0dXsIoXH4CyONqW9weStC7O6ybHawe2O/os+alVkzrSqBDTSvPn64+1V7kTnU/PwLEE503b3rJ9411yOx3Dyw0+VW1W/3uBccJVVt/SZ2ySTUbHAgMBAAECgYAhYrOiTzDnUgCVqsJPhet7g4GrrnQo5mfba1Blr5w94IG/tu51CSszEfr2/w2qQSWK6iz5/zTO2yPLZBiUTywEnu5K4Qj2VSO+zowVM7BNMLDu2G2iSk7qNLtyf4prZApHNgkfurCouVSZvVU71yORog7iV2ThTn8G5k3iQd040QJBAOQCJa2e+GWg4AblOgl+XuDl82Ur4lClxL4LevkkTErfFbG5TEkIRuU+SHjWc9VSn/YT7GnlDI0ycnL26TtKGA8CQQDhEPthM+Cuyef0bnLfCJq6RC1kpWRb6yWGhrV1C1sTikoHeSiq6fi9saNcYeQCLd58O10I4r8JjC2kACHG/m3JAkEAwlPSKRfEPVnPlhDoVg8Obj+OIjw0tueRtyext4XoQCfCJab4DYawZdGfkt2z+6xgCSsR428EM5M7WCB4x79uoQJBANGKVgBxpEYXhPV1v00XXbb9sqV5tq49h3pwAJEwOWM/5RyAGPTHUOaLdGSWXwoIWpOfUUbslJ/2+qct2ETErMECQCOwbHBPJCXvER2aO3gyVVwDhMsAplkk9pb7gmnGBFAd8K2IPCSsB0WhhVlaEdpeI3tjc4YwzBAIFjB8Q680G5I=

语法

select rsa_private_decrypt(rsa_public_encrypt('china no.1', pubKey), priKey)

本项目github链接

注意事项

线上集群模式使用时,插件jar包需要放到每个worker下面,每个节点都要拷贝

拷贝时当前登录用户需和presto服务安装目录用户组保持一致,不然会出bug,使用chown命令和presto启动用户保持一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值