自定义函数
自定义函数
使用场景:在数据开发中需要实现加解密等复杂处理,SQL 语法若不支持,可通过 Java 自定义函数处理。
使用角色:数据开发人员。
功能描述:数据开发人员通过上传 jar 包为自定义函数,通过引用函数实现数据加解密以及复杂的数据聚合等加工处理。
内置函数
函数名称 | 函数用途 |
---|---|
LUBAN_MD5_ENCRYPT | md5加密函数 |
LUBAN_SM4_ENCRYPT | sm4加密函数 |
LUBAN_SM4_DECRYPT | sm4解密函数 |
LUBAN_AES128_ENCRYPT | aes128加密函数 |
LUBAN_AES128_DECRYPT | aes128解密函数 |
自定义函数
进入数据开发 > 批量数据 > 自定义函数界面,点击界面上方的 “新建自定义函数” 按钮,在新建自定义函数弹窗中上传文件后点击右下角 “保存”,待系统校验通过后即可按 tab 页生成多条函数记录至函数列表。
注意
- 上传后缀为 .jar 的自定义函数文件后,系统会自动解析 jar 包中所有函数的名称,并显示在弹窗界面下方;
- 新建函数名称不允许与已有自定义函数同名;
- 文件上传仅支持 jar 类型资源文件上传(只支持UDF),jar文件大小最大支持 1G;
- 一个 jar 中可包含多个函数;
- 相同的 jar 包只能上传一次,系统会根据 jar 包名字判断两个 jar 包是否为同一个。
- 解析项说明
- 函数名称:系统自动解析
jar
包中所有函数的名称,并以函数名称为tab
页标题,分开展示,函数名称不支持修改; - 参数说明:用于说明函数的参数情况,系统自动解析参数名称、参数类型,仅支持修改参数类型;
- 返回类型:自动解析返回类型,可下拉选择参数类型,参数名称不支持修改;
- 函数用途:非必填,用于说明函数用途,手动输入。
- 函数名称:系统自动解析
- 新建函数须知
- 自定义函数所在的包需要为
“com.hexadb.luban.custom.function”
的子包; - 自定义函数的入参和返回类型需要为
String
或者java
基本类型以及包装类; - 自定义函数需要为
java
的public static
方法; - 自定义函数支持的
JDK
版本为JDK1.8
。
- 自定义函数所在的包需要为
如果自定义函数的jar
包中有依赖第三方的jar
,请在pom.xml
中添加如下内容将第三方jar
包中的class
一起进行打包,上传后缀名为jar-with-dependencies
的jar
。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.4.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>assemble-all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
注意
删除操作仅删除列表中的函数记录,不会删除对应 jar,除非该 jar 包关联的所有函数均被删除,则在删除最后一条关联函数时删除 jar 包;被加工作业引用的函数删除后,加工作业会失败报错;内置函数不允许修改、删除文件和删除。
函数使用方式
平台支持在数据开发 > 批量数据 > 数据加工中的“SQL加工”节点、数据分析 > 数据探查,两处使用自定义函数或基础内置函数。
以内置加解密函数使用为例:可在SQL语句中引用加密函数先完成加密,再使用解密函数进行解密,具体引用语句示例如下。
支持函数白名单
分类 | 支持函数 |
---|---|
字符串函数 | to_char()、 position()、 string_agg()、concat()、 split_part()、 char_length() 、lower() 、upper()、 substring() 、REPLACE trim() |
数学函数 | abs()、 sqrt()、 round()、 ceil() 或 ceiling()、 floor()、 pow() 或 power()、 exp() 、log() |
日期和时间函数 | current_date、 current_time、 now()、 extract()、 age() |
聚合查询 | sum、avg、max、min、count |
条件函数 | case 表达式 |
系统函数 | version() |
其他函数 | unnest()、 array_to_string()、 string_to_array()、 coalesce() |