Inceptor拥有大量的内置函数,用户可以使用函数对数据进行多种计算,函数及其用法在Inceptor函数和运算符手册中列出。另外,您可以在Inceptor中创建自定义函数UDF(User Define Function)来扩充函数功能。用户自定义函数需要使用Java语言进行编写,完成的UDF可以打包成Jar加载到Inceptor server中。
自定义函数分为 临时函数和永久函数,临时函数在重启Inceptor前在各个session间都是有效的,重启Inceptor后该函数将不再存在,如需使用需要重新创建。永久函数则在Inceptor重启后依然可以使用。临时函数和永久函数的创建和删除可以通过Inceptor SQL进行,下文将对创建流程做出介绍。
Tip:Inceptor从TDH 4.5.2开始支持创建永久函数。
二、部署方式
环境说明:TDH-CE(TDH 9.0)
星环提供了三种部署方式,可查看下方介绍进行了解,如果您想了解更多我们也为您提供了部署Demo及视频教学供您参考:《UDF部署操作指南(含视频教程)》
1. 把UDF固化到image里,重新打image(推荐)
此方式的核心逻辑是把UDF jar包放到image的/usr/lib/inceptor/下面,重新制作image。
具体步骤请参考:《UDF部署操作指南(含视频教程)》
2. 创建临时函数CREATE/DROP TEMPORARY FUNCTION
第一步添加jar包:add jar <file_path>;
<file_path>指定添加jar包的路径,添加的jar必须在Inceptor Server运行的容器里。
注意:在重启Inceptor Server之前,通过 add jar 添加的jar包不能重名,且不能包含重名的类。
第二步创建命令:create temporary function <function_name> as <class_name>;
以上语句创建一个由class_name实现的临时函数。这个新创建的函数只能在当前session使用。用户可以使用任意一个在classpath中的class。
检验是否创建成功:desc function <function_name>;输入命令后,显示函数名称
删除临时函数:drop temporary function [if exists] <function_name>;若函数存在,删除函数
3. 创建永久函数CREATE/DROP PERMANENT FUNCTION
说明:创建一个由class_name实现的永久函数。这个函数将在metastore登记,不需要在每个session重新建临时函数。需要加入环境的jar包,文件或者档案可以通过 using 指定。第一次使用该函数时,这些资源会像被add jar/file 一样加到环境中。如果Inceptor不在local mode,那么资源的地址也必须是非本地URI,比如HDFS地址。
第一步添加jar包:add jar <file_path>;
<file_path>指定添加jar包的路径,添加的jar必须在Inceptor Server运行的容器里。
注意:在重启Inceptor Server之前,通过 add jar 添加的jar包不能重名,且不能包含重名的类。
第二步创建命令:
create permanent function [<database_name>] <function_name> as <class_name>
[using jar/file/archive’<file_uri>’[, jar/file/archive’<file_uri>’] ];
[...]表示其中内容可省略;“jar/file/archive”分别代表三种文件形式:压缩,文件,归档;
<file_uri>:Uniform Resource Identifier 统一资源标志符,即文件路径。
删除永久函数:drop permanent function [if exists] <function_name>; 若函数存在,删除函数
三、注意事项
1. UDF 无论是临时还是永久,如果要删除并重新创建使用相同类或者jar 的话,都要重启inceptor server。
2. 永久函数,临时函数,内嵌函数(自带的UDF)不能重名; 永久函数和plsql 函数/存储过程也不能重名;临时函数可以和plsql 函数重名,调用时优先调用临时函数。
3. 永久函数和临时函数都是全局的,不受当前数据库影响。
4. 永久函数指定的jar 被删除后,永久函数不允许删除。
更多文章推荐: