这里的程序包既可以用来扩展 Connector 的功能,也可以创建自定义函数(UDF)。
语法
目前流计算 Oceanus 支持 Java 和 Scala 两种语言编写的程序包。当用户上传了自定义程序包后,在界面上关联后即可用下面的 CREATE FUNCTION 语句来声明:
CREATE TEMPORARY SYSTEM FUNCTION 函数名AS '函数类全名' [LANGUAGE JAVA|SCALA]
其中的函数名可以自行定义,但不要与现有的冲突。函数类全名为 Java 或 Scala 类的类全名(例如
'com.example.flink.MyCustomFunction'
)。命名覆盖
如果存在系统内置的同名函数时,用户使用上述语法创建的 UDF 会覆盖系统内置的函数。因此除非有意改变系统函数的功能,请不要创建与系统内置函数同名的自定义函数。
函数类型
目前 Flink 支持下面多种函数定义。
标量函数(Scalar Function)
标量函数简称 UDF,作用是将一个值转换为另一个值(一对一),例如系统内置的
SUBSTRING
、REPLACE
等字符串操作函数,都属于标量函数。表函数(Table Function)
表函数简称 UDTF,作用是将一个值转为表中的一行数据(一变多),这样可以在后续 JOIN 操作中作为右表。
聚合函数(Aggregate Function)
聚合函数简称 UDAGG,作用是将多行数据的一组值,聚合为一个最终值(多变一),例如系统内置的
MAX
、MIN
、AVG
等都属于聚合函数。表聚合函数(Table Aggregate Function)
表聚合函数的作用是将多行数据的一组值,聚合为新的多行数据(多对多)。
异步表函数(Async Table Function)
异步表函数可作为一种特殊的数据源,例如可以通过它来对接外部的数据库、数据存储。