1.表值函数概念
用户定义的表值函数将零个,一个或多个标量值作为输入参数。返回任意数量的行作为输出,返回的行可以包含一个或多个列。
与标量函数区别:
相同:都是将零个、一个或多个标量值作为输入参数
差异:标量函数返回单个值作为输出,表值函数返回任意数量的行作为输出
2.表值函数实现
表值函数主要通过扩展TableFunction实现。(org.apache.flink.table.function包)
必须实现以下方法:
- eval():评估方法,可重载
注意:
- 表值函数的行为由其评估方法决定。一个评估方法必须声明为public并命名为eval。
- 可实现多个名为eval的评估方法来重载TableFunction。
- 评估方法的参数类型决定了表值函数的所有有效参数。评估方法也可以支持变量参数,比如eval(String…str)
- 返回的表的类型由TableFunction的泛型类型决定。评估方法使用受保护的collect(T)方法发出输出行。
3.示例
import org.apache.flink.table.annotation.DataTypeHint;
import org.apache.flink.table.annotation.FunctionHint;
import org.apache.flink.table.functions.TableFunction;
import org.apache.flink.types.Row;
@FunctionHint(output = @DataTypeHint("ROW<product STRING, num STRING>"))
public class SplitRowUdtf extends TableFunction<Row> {
public void eval(String a) {
String[] split = a.split("-");
String product = split[0];
String num = split[1];
collect(Row.of(product,num));
}
}
表值函数是用户定义的函数,接受零个或多个标量值输入,返回多行数据。它们通过扩展TableFunction接口实现,关键方法是eval。例如,SplitRowUdtf函数将字符串按特定分隔符拆分为两列产品和数量。
&spm=1001.2101.3001.5002&articleId=130749963&d=1&t=3&u=2e80f67121fb4e05a9d238bdcb3a5d8c)
395

被折叠的 条评论
为什么被折叠?



