UDF全称为User Defined Function,即用户自定义函数。MaxCompute提供多种内建函数来满足您的计算需求,同时您还可以通过创建自定义函数来满足不同的计算需求。

UDF的使用方法与普通的内建函数类似。Java和MaxCompute的数据类型的对应关系,请参见参数与返回值类型

UDF分类

MaxCompute支持的UDF有三种,如下表所示。
UDF 分类 描述
UDF(User Defined Scalar Function) 用户自定义标量值函数(User Defined Scalar Function)。其输入与输出是一对一的关系,即读入一行数据,写出一条输出值 。
UDTF(User Defined Table Valued Function) 自定义表值函数。用来解决一次函数调用输出多行数据场景。它是唯一能够返回多个字段的自定义函数,而UDF只能一次计算输出一条返回值。
UDAF(User Defined Aggregation Function) 自定义聚合函数。其输入与输出是多对一的关系, 即将多条输入记录聚合成一条输出值。它可以与SQL中的GROUP BY语句联用。具体语法请参见聚合函数
说明
  • UDF广义的说法代表了自定义标量函数、自定义聚合函数及自定义表函数三种类型的自定义函数的集合。狭义的说法仅代表用户自定义标量函数。在帮助文档中将经常出现UDF这一名词,请您根据上下文内容理解其具体含义。
  • 在SQL语句中使用自定义函数时,可能提示内存不足。这是由于计算的数据量过大并且存在倾斜,导致任务超出默认分配的内存。这种情况下,您可以通过set odps.sql.udf.joiner.jvm.memory=xxxx;set odps.sql.udf.joiner.jvm.memory=xxxx;语句手动设置更大的内存。

跨项目分享

MaxCompute的UDF支持跨项目分享,即在project_a中可以使用project_b的UDF。对应的语句为select other_project:udf_in_other_project(arg0, arg1) as res from table_t;。具体示例请参见跨项目空间Table、Resource、Function分享示例

UDF SDK依赖安装

如果您使用Maven,可以从 Maven库中搜索odps-sdk-udf,从而获取不同版本的Java SDK,相关配置信息如下所示。
<dependency>
    <groupId>com.aliyun.odps</groupId>
    <artifactId>odps-sdk-udf</artifactId>
   <version>0.29.10-public</version>
</dependency>