为了满足复杂的数据开发场景,Dataphin智能研发版支持自定义Java UDF函数。本教程以Java自带函数(toLowerCase)为例,为您介绍如何基于Dataphin自定义Java UDF函数。
前提条件
已下载JAR包。
背景信息
本教程基于下载的JAR包自定义的Java UDF函数,实现大写字母转换为小写字母。您也可以编写Java UDF代码,以实现更多的功能,请参见IntelliJ IDEA Java UDF开发最佳实践。
MaxCompute计算类型下若需跨项目引用自定义函数(UDF),即在一个项目引用另外一个项目的UDF,可以使用project_name:function_name。例如在项目test_dev下有自定义函数 to_normal,则在项目xyz_dev下可以通过test_dev:to_normal来使用该函数。
本教程中的JAR包的代码如下。
package org.alidata.odps.udf.examples;
import com.aliyun.odps.udf.UDF;
public final class javaudf extends UDF {
  public String evaluate(String s) {
    if (s == null) {
        return null;
    }
        return s.toLowerCase();
  }
}其中:
- JAR包路径为org.alidata.odps.udf.examples。 
- class文件名为javaudf。 
步骤一:上传JAR包
- 登录Dataphin控制台。 
- 在Dataphin控制台页面,选择工作区地域后,单击进入Dataphin>>。 
- 进入资源管理页面。 - 在Dataphin首页的顶部菜单栏中,选择研发 > 数据研发。 
- 在左侧导航栏中,选择数据处理 > 资源。 
- 在资源列表上方,单击  图标。 图标。
 
- 在新建资源对话框中,配置以下参数。 - 参数 - 描述 - 类型 - 选择jar。 - 名称 - 上传文件的名称需要以文件类型结尾。例如javaudf.jar。 - 描述 - 填写资源的描述。 - 上传文件 - 选择本地JAR文件,例如javaudf.jar。 - 计算类型 - 选择MaxCompute。 - 选择目录 - 选择用于存放JAR包的目录。系统默认为资源管理,保持默认即可。 
- 单击提交,完成资源的提交。 
- 在提交备注对话框,填写备注信息。 
- 单击确定并提交。 
- (可选)发布资源至生产环境。 - 如果您的开发模式是Dev-Prod模式,则需要发布资源至生产环境,详情请参见管理发布任务。 
- 如果您的开发模式是Basic模式,则提交成功的资源,即可进入生产环境。 
 
步骤二:创建MAXC函数
- 在开发页面的左侧导航栏中,选择数据开发 > 函数。 
- 在函数列表上方单击  图标,选择MAXC函数。 图标,选择MAXC函数。
- 在新建函数对话框中,配置以下参数。 - 参数 - 描述 - 名称 - 填写函数的名称,例如Java - 选择资源 - 选择已上传的资源javaudf.jar。 - 类名 - 类名的格式为JAR包路径.class文件名。填写org.alidata.odps.udf.examples.javaudf。 - 类型 - 函数的类型。选择字符串。 - 命令格式 - 定义引用函数的格式。填写to_char(string i)。 - 使用文档 - 填写函数的使用描述,例如javaudf。 - 选择目录 - 默认为MAXC函数-用户自定义函数,保持默认。 
- 单击提交,完成资源的提交。 
- 在提交备注对话框,填写备注信息。 
- 单击确定并提交。 
- (可选)发布函数至生产环境。 - 如果您的开发模式是Dev-Prod模式,则需要发布函数至生产环境,详情请参见管理发布任务。 
- 如果您的开发模式是Basic模式,则提交成功的函数,即可进入生产环境。 
 
步骤三:新建SQL任务
- 在开发页面的左侧导航栏中,选择数据处理 > 计算任务。 
- 在计算任务列表上方单击  图标,选择MAX_COMPUTE_SQL。 图标,选择MAX_COMPUTE_SQL。
- 在新建MAX_COMPUTE_SQL任务对话框中,配置以下参数。 - 参数 - 描述 - 名称 - 填写计算任务的名称,例如javaudf。 - 调度类型 - 选择任务的调度类型为周期性节点。 - 选择目录 - 系统自动选择为计算任务。 - 使用模板 - 单击开关来选择是否使用模板,若开启使用模板,则还需选择模板和模板版本。 - 描述 - 填写对任务的简单描述。 
- 单击确定。 
步骤四:使用Java UDF函数
- 在SQL任务的代码编写页面,编写代码,例如 - select java('ABCGDfagHH');。
- 单击代码编辑区域上方的运行,运行当前代码并查看运行结果。 
(可选)调度运维
如果需要定期的运行SQL任务,则需要配置SQL任务的调度参数并发布至生产环境,参与生产环境的调度。