知识卡片

自定义函数按输入输出基数分类

专业/工作 · 503.d

内容

Table API和SQL的自定义函数按”输入多少行、输出多少行”这个基数关系分成三类:标量函数(Scalar Function)接收若干个标量值,返回唯一一个标量值,是最常见的逐行转换(一进一出);表函数(Table Function)同样接收标量值,但可以返回任意多行、每行可以有多个列(一进多出),适合把一个字段展开成多条记录的场景;聚合函数(Aggregation Function)则相反,需要维护一个累加器(accumulator),在accumulate方法里不断吞下多行数据更新累加器状态,最后在getValue里把整个累加过程收敛成一个标量值(多进一出)。这套”一对一、一对多、多对一”的三分法是关系型计算里UDF/UDTF/UDAF的通用分类思路,不是Flink独有,理解了基数关系就知道该继承哪个基类、该实现哪些方法。

参考来源

《Flink入门与实战》第7章《Table API和SQL》