如果MaxCompute提供的内建函数无法支撑您的业务实现,您可通过创建自定义函数满足您的业务需求。本文为您介绍如何在DataWorks中使用可视化方式创建UDF(User-Defined Function)自定义函数。
背景内容
UDF用于扩展已有的函数库,可在执行查询时根据自身需求自定义逻辑和计算,提供更丰富的数据处理功能,详情请参见UDF概述。除DataWorks提供的可视化方式外,您还可使用MaxCompute Studio创建UDF或在MaxCompute中使用命令行创建UDF,详情请参见MaxCompute Studio创建自定义函数、MaxCompute通过命令行创建自定义函数。
前提条件
您需基于资源创建函数,因此,创建函数前请先创建MaxCompute资源,并将该资源上传或添加至DataWorks。详情请参见创建MaxCompute资源。
创建MaxCompute资源时,可参考UDF开发(Java)、UDF开发(Python3)准备MaxCompute资源文件。
使用限制
DataWorks仅支持使用可视化方式查看及管理通过DataWorks可视化方式上传的自定义函数。通过其他工具(例如,MaxCompute Studio)添加至MaxCompute引擎的自定义函数,需通过DataWorks的MaxCompute函数功能手动加载至DataWorks后,才可在DataWorks查看并进行相关管理操作。详情请参见MaxCompute函数管理。
注册函数
- 进入数据开发页面。 - 登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的,在下拉框中选择对应工作空间后单击进入数据开发。 
- 创建业务流程,详情请参见创建周期业务流程。 
- 新建函数。 - 打开相应的业务流程,右键单击MaxCompute,选择新建函数。 
- 在新建函数对话框中,输入名称,并选择路径。 
- 单击新建。 
- 在注册函数对话框中,配置各项参数。  - 参数 - 描述 - 函数类型 - 选择函数类型,包括数学运算函数、聚合函数、字符串处理函数、日期函数、窗口函数和其他函数。更多详情请参见使用内建函数。 - MaxCompute引擎实例 - 默认不可修改。 - 函数名 - UDF函数名,即SQL中引用该函数所使用的名称。需要全局唯一,且注册函数后不支持修改。 - 责任人 - 默认显示为当前登录账号,您也可以选择其他账号。 - 类名 - UDF函数的类名,格式为 - 资源名.类名。其中,资源名可以为Java包名称或Python资源名称。- DataWorks创建自定义函数时支持使用JAR及Python两种类型的MaxCompute资源,不同类型资源的类名配置如下: - 当资源类型为JAR时,配置的类名格式为 - Java包名称.实际类名,您可以在IDEA中通过- copy reference语句获取。- 例如, - com.aliyun.odps.examples.udf为Java包的名称,- UDAFExample为实际类名,则类名参数配置为- com.aliyun.odps.examples.udf.UDAFExample。
- 当资源类型为Python时,配置的类名格式为 - Python资源名称.实际类名。- 例如, - LcLognormDist_sh为Python资源名称,- LcLognormDist_sh为实际类名,则类名参数配置为- LcLognormDist_sh.LcLognormDist_sh。说明- 填写资源名称时,无需添加.jar或.py后缀。 
- 资源需要提交并发布后才可以使用,详情请参见创建并使用MaxCompute资源。 
 
 - 资源列表 - 选择注册函数所需使用的资源。 - 可视化模式:仅支持选择已上传或添加至DataWorks的资源。 
- 脚本模式:支持选择相应MaxCompute引擎中的所有资源。 
 说明- 无需填写已添加的资源的路径。 
- 如果UDF中调用了多个资源,则多个资源使用英文逗号(,)分隔。 
 - 描述 - 针对当前UDF作用的简单描述。 - 命令格式 - 该UDF的具体使用方法示例,例如 - test。- 参数说明 - 支持输入的参数类型以及返回参数类型的具体说明。 - 返回值 - 返回值,例如1,非必填项。 - 示例 - 函数中的示例,非必填项。 
 
- 单击工具栏中的  图标,保存函数。 图标,保存函数。
- 提交函数。 - 单击工具栏中的  图标。 图标。
- 在提交对话框中,输入变更描述。 
- 单击确认。 
 
查看在MaxCompute计算引擎中存在的函数、函数的变更历史等操作,详情请参见MaxCompute函数管理。
查看函数版本与回滚
右键单击相应函数名称,单击历史版本,即可查看函数历史版本信息或执行回滚操作。

节点中使用自定义函数
可直接使用自定义函数名称,您可选中资源,右键引用函数,在当前节点编辑页面快速生成自定义函数名称。
附录一:查看自定义函数列表
- 使用 - SHOW FUNCTIONS命令可以列出与DataWorks工作空间的数据开发绑定的MaxCompute计算引擎项目中所有已注册的自定义函数。
- MaxCompute自身内置了诸多函数,详情请参见:内建函数概述。 
//查看当前项目下的函数。
SHOW FUNCTIONS;附录二:查看自定义函数详情
- 可以使用 - DESCRIBE或简写的- DESC命令,后跟函数名来查看自定义函数的详细信息。- //使用简写形式查看自定义函数的详细信息 DESC FUNCTION <function_name>;
- 在DataWorks中,如果您在业务流程中需要的处理逻辑无法通过现有函数实现,可以编写MaxCompute自定义函数,并将相应的资源(如JAR包、Python文件等)上传和关联,以此来管理和扩充您的数据处理功能。详情请参见MaxCompute资源管理。 
最佳实践
自定义函数创建完成后,您可参考实现指定用户访问特定UDF最佳实践,实现UDF的访问权限管控。
相关文档
- MaxCompute支持一键打包JAR包、上传JAR包资源及注册MaxCompute自定义函数(UDF),详情请参见打包、上传及注册。 
- 在使用Java编写MaxCompute UDF过程中如遇到问题,详情请参见Java语言编写MaxCompute UDF的常见问题。 
- 在使用Python编写MaxCompute UDF过程中如遇到问题,详情请参见Python语言编写MaxCompute UDF的常见问题。 
常见问题
Q:通过DataWorks上传的资源并定义为UDF函数后,除了在数据开发中供ODPS SQL节点使用外,是否可以在数据分析SQL查询中使用?
A:可以,通过DataWorks注册的UDF函数,实际是存储在MaxCompute项目中,因此,不仅可以在ODPS SQL节点中使用,还可以在数据分析SQL查询中使用。