本文为您介绍如何为实时计算自定义函数搭建环境和使用。

说明 仅独享模式支持自定义函数。

UDX分类

实时计算支持以下3类自定义函数:
UDX分类 描述
UDF(User Defined Function) 用户自定义标量值函数(User Defined Scalar Function)。其输入与输出是一对一的关系,即读入一行数据,写出一条输出值。
UDAF(User Defined Aggregation Function) 自定义聚合函数,其输入与输出是多对一的关系, 即将多条输入记录聚合成一条输出值。可以与SQL中的GROUP BY语句联用。具体语法请参见聚合函数
UDTF(User Defined Table-valued Function) 自定义表值函数,调用一次函数输出多行或多列数据。

UDX DEMO

阿里云团队为您提供UDX DEMO便于您快速进行业务开发。以下实时计算UDX DEMO中包含UDF、UDAF和UDTF的实现,供您参考:
说明
  • DEMO示例中已为您配置对应版本的开发环境,您无需进行环境搭建。
  • DEMO为Maven项目,您可使用IntelliJ IDEA进行开发。开发方法请参见使用IntelliJ IDEA开发自定义函数

环境搭建

以上DEMO主要使用的依赖JAR包如下,如您需要单独使用,可自行下载:

注册使用

  1. 登录实时计算控制台
  2. 单击顶部菜单中的开发,进入开发页面。
  3. 在左侧的导航栏中单击资源引用
  4. 资源引用页签的右上角,单击新建资源
  5. 上传资源页面输入资源配置信息。
    参数名称 说明
    上传方式 当前仅支持本地上传。
    资源选择 单击选择资源,选择需要引用的资源。
    资源名称 输入资源名称。
    资源备注 输入资源备注信息。
    资源类型 选择引用资源类型,JAR、DICTIONARY或PYTHON。
  6. 资源引用页签中,将鼠标悬停在对应作业的右侧的更多上。
  7. 选择下拉列表中的引用,将资源中的代码输入实时计算作业编辑窗口。
  8. 在作业的编辑窗口的顶部,输入自定义函数声明,示例如下。
    CREATE FUNCTION stringLengthUdf AS 'com.hjc.test.blink.sql.udx.StringLengthUdf';

参数与返回值类型

实时计算支持定义Java UDX时,使用Java类型作为参数和返回值。下面为实时计算类型和Java类型的映射关系。
实时计算数类型 Java类型
TINYINT java.lang.Byte
SAMLLINT java.lang.Short
INT java.lang.Integer
BIGINT java.lang.Long
FLOAT java.lang.Float
DOUBLE java.lang.Double
DECIMAL java.math.BigDecimal
BOOLEAN java.lang.Boolean
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
CHAR java.lang.Character
STRING java.lang.String
VARBINARY java.lang.byte[]
ARRAY 暂不支持
MAP 暂不支持

自定义函数参数获取

UDX中提供了可选的open(FunctionContext context) 方法,FunctionContext具备参数传递功能,自定义配置项可以通过此对象来传递。

假设需要在作业中添加如下2个参数。
testKey1=lincoln
test.key2=todd
以UDTF为例,在open方法中通过context.getJobParameter即可获取。示例如下。
public void open(FunctionContext context) throws Exception {
      String key1 = context.getJobParameter("testKey1", "empty");
      String key2 = context.getJobParameter("test.key2", "empty");
      System.err.println(String.format("end open: key1:%s, key2:%s", key1, key2));
}
说明 具体的作业参数可参见作业参数