在MyUDTF中继承了TableFunction, 所有的自定义表函数都必须继承该抽象类,其中T表示返回的数据类型,通常如果是原子类型则直接指定例如String, 如果是复合类型通常会选择Row, FlinkSQL 通过类型提取可以自动识别返回的类型,如果识别不了需要重载其getResultType方法,指定其返回的TypeInformation,重点看下eval 方法定义: eval ...
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; import org.apache.flink.table.functions.TableFunction; import org.apache.flink.types.Row; import static org.apache.flink.table.api.Expressions.*; /** * 输入数据: * nc -lk 8888 * a,bb,cc * * 输出结果: * * ...
下面的例子,我们通过复写TableFunction#getResultType()方法使得表返回类型是RowTypeInfo(String, Integer)。 publicclassCustomTypeSplitextendsTableFunction<Row>{publicvoideval(String str) {for(String s : str.split(" ")) { Row row=newRow(2); row.setField(0, s); row.setField(1, s.length); col...
在MyUDTF中继承了TableFunction<T>, 所有的自定义表函数都必须继承该抽象类,其中T表示返回的数据类型,通常如果是原子类型则直接指定例如String, 如果是复合类型通常会选择Row, FlinkSQL 通过类型提取可以自动识别返回的类型,如果识别不了需要重载其getResultType方法,指定其返回的TypeInformation,重点看下eval 方法定义: ...
public static class FlattenFunction extends TableFunction<Integer>{ public void eval(Integer... args){ for (Integer i: args){ collect(i); } } } 通过注解指定返回类型 /** * 通过注册指定返回值类型,flink 1.11 版本开始支持 */ @FunctionHint(output = @DataTypeHint("ROW< i INT, s STRING >...
表(Table)是我们非常熟悉的一个概念,它是关系型数据库中数据存储的基本形式,也是 SQL 执行的基本对象。Flink 中的表概念也并不特殊,是由多个“行”数据构成的,每个行(Row)又可以有定义好的多个列(Column)字段;整体来看,表就是固定类型的数据组成的二维矩阵。
// use the function in SQL API tableEnv.sqlQuery("SELECT string, HASHCODE(string) FROM MyTable"); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 默认情况下evaluation方法的返回值类型是由flink类型抽取工具决定。对于基础类型及简单的POJOS是足够的,但是更复杂的类型...
*/@FunctionHint(output=@DataTypeHint("ROW< i INT, s STRING >"))classDuplicatorFunctionextendsTableFunction<Row>{publicvoideval(Integer i,String s){collect(Row.of(i,s));collect(Row.of(i,s));}} 注册函数 这里使用blink的planner,然后把上述三个函数都注册了 ...
在MyUDTF中继承了TableFunction<T>, 所有的自定义表函数都必须继承该抽象类,其中T表示返回的数据类型,通常如果是原子类型则直接指定例如String, 如果是复合类型通常会选择Row, FlinkSQL 通过类型提取可以自动识别返回的类型,如果识别不了需要重载其getResultType方法,指定其返回的TypeInformation,重点看下eval 方法定义: ...
to emit a row collect(new Tuple2<String, Integer>(s, s.length())); } } } BatchTableEnvironment tableEnv = TableEnvironment.getTableEnvironment(env); Table myTable = ... // table schema: [a: String] // Register the function. tableEnv.registerFunction("split", new Split("#")); /...