Flink自定义函数
Scala function
需要继承ScalarFunciton类
制表函数(table function 类似UDTF)
自定义该函数时需要继承TableFunctioin<一个类或者Row>
这里泛型中的类的各个属性是转换后表的结构,以下为例,有一个类A,其内部有ID和VALUE两个属性,那么这个A就可以写在泛型中,
public static class tableFunctionName extend TableFunctioin<A>{
public void eval(...){具体的制表函数}
}
如果不想写POJO或者JavaBean,可以写Row(类似Object),但此时需要借助注解
@FunctionHint(output=@DataTypeHint(“row<ID int, VALUE string>”))
public static class tableFunctionName extend TableFunctioin<A>{
public void eval(...){具体的制表函数}
}
一行变多行
id | value1 | value2 |
---|---|---|
1 | a | b |
(制表函数上变下)
id | value |
---|---|
1 | a |
1 | b |
聚合函数(aggregate function)
自定义该函数时,需要继承AggregateFunction<T,accumulator>
T:聚合后结果的类型
accumulator:累加器
id | value |
---|---|
1 | a |
1 | b |
变成
id | value1 | value2 |
---|---|---|
1 | a | b |
表值聚合函数(table aggregate)
自定义该函数时,需要继承TableAggregateFunction<T,accumulator>
T:最终返回的结果的类型
accumulator:累加器
关于表函数的使用说明
各个自定义函数中需要实现一个eval方法
函数需要先进行注册,后使用
tEnv.createTemporayFunction("注册函数的名称",注册函数的类名.class)