Flink自定义函数之表值函数(UDTF函数)

1.表值函数概念

用户定义的表值函数将零个,一个或多个标量值作为输入参数。返回任意数量的行作为输出,返回的行可以包含一个或多个列。

与标量函数区别:

相同:都是将零个、一个或多个标量值作为输入参数
差异:标量函数返回单个值作为输出,表值函数返回任意数量的行作为输出

2.表值函数实现

表值函数主要通过扩展TableFunction实现。(org.apache.flink.table.function包)

必须实现以下方法:

  • eval():评估方法,可重载

注意:

  1. 表值函数的行为由其评估方法决定。一个评估方法必须声明为public并命名为eval。
  2. 可实现多个名为eval的评估方法来重载TableFunction。
  3. 评估方法的参数类型决定了表值函数的所有有效参数。评估方法也可以支持变量参数,比如eval(String…str)
  4. 返回的表的类型由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"))
public class SplitRowUdtf extends TableFunction {
    public void eval(String a) {
        String[] split = a.split("-");
        String product = split[0];
        String num = split[1];
        collect(Row.of(product,num));
    }
}

你可能感兴趣的:(Flink,flink,大数据)