标量函数

标量函数:将标量值转换成一个新标量值 一进一出,多进一出 用户自定义函数 - 图1 核心逻辑: 继承flink table Scalarfunction 类,一般只需实现核心方法,eval 计算逻辑。 一般常用的时间格式转换,数据脱敏等处理场景,均可使用该类函数完成。

表值函数

表值函数:将标量值转换成新的行数据 一进多出,多进多出 用户自定义函数 - 图2 定义一个表值函数需要扩展TableFunction。可以通过实现多个名为 eval 的方法对求值方法进行重载。 像其他函数一样,输入和输出类型也可以通过反射自动提取出来 常用的列转行数据场景均可通过该函数去实现

聚合函数

聚合函数:自定义聚合函数(UDAF)是把一个表(一行或者多行,每行可以有一列或者多列)聚合成一个标量值。 下面几个方法是每个 AggregateFunction 必须要实现的:
createAccumulator()
accumulate()
getValue() 用户自定义函数 - 图3 聚合函数用在会话窗口(当两个会话窗口合并的时 候需要 merge 他们的 accumulator)的话, merge() 方法就是必须要实现的。

表值聚合函数

表值聚合函数:自定义表值聚合函数(UDTAF) 可以把一个表(一行或者多行,每行有一列或者多列)聚合成另一张表,结果中可以有多行多列。 下面几个 TableAggregateFunction 的方法在某些特定场景 下是必须要实现的: retract() 在 bounded OVER 窗口中的聚合函数必须要实现。 merge() 在许多批式聚合和会话窗口聚合中是必须要实现的。 resetAccumulator() 在许多批式聚合中是必须要实现的。 emitValue() 在批式聚合以及窗口聚合中是必须要实现的。 下面的 TableAggregateFunction 的方法可以提升流式任 务的效率: emitUpdateWithRetract() 在 retract 模式下,该方法负责发 送被更新的值。 用户自定义函数 - 图4