eval 是没有返回值的,和标量函数不同,Flink TableFunction 接⼝提供了 collect(T) 来发送输出的数据,如果体现在函数签名上,就成了标量函数,使⽤ collect(T) 能体现出 进⼀条数据 出多条数据。 在SQL 中是⽤ SQL 中的LATERAL TABLE(<TableFunction>) 配合 JOIN 、 LEFT JOIN xxx ON TRUE 使⽤。
在MyUDTF中继承了TableFunction<T>, 所有的自定义表函数都必须继承该抽象类,其中T表示返回的数据类型,通常如果是原子类型则直接指定例如String, 如果是复合类型通常会选择Row, FlinkSQL 通过类型提取可以自动识别返回的类型,如果识别不了需要重载其getResultType方法,指定其返回的TypeInformation,重点看下eval 方法定义: ...
今天我们来聊聊flink sql中另外一种自定义函数-TableFuntion. TableFuntion 可以有0个、一个、多个输入参数,他的返回值可以是任意行,每行可以有多列数据. 实现自定义TableFunction需要继承TableFunction类,然后定义一个public类型的eval方法。结合官网的例子具体来讲解一下。 自定义函数 单个eval方法 代码语言:javascript...
本篇幅介绍Flink Table/SQL中如何自定义一个表函数(TableFunction),介绍其基本用法以及与源码结合分析其调用流程。 基本使用 表函数TableFunction相对标量函数ScalarFunction一对一,它是一个一对多的情况,通常使用TableFunction来完成列转行的一个操作。先通过一个实际案例了解其用法:终端设备上报数据,数据类型包含温度、耗电...
Flink SQL 中TableFunction使用分析 本篇幅介绍Flink Table/SQL中如何自定义一个表函数(TableFunction),介绍其基本用法以及与源码结合分析其调用流程。 基本使用 表函数TableFunction相对标量函数ScalarFunction一对一,它是一个一对多的情况,通常使用TableFunction来完成列转行的一个操作。先通过一个实际案例了解其用法:终端...
executeSql("select id, word from "+table +", lateral table(split(id))").print();}//自定义UDTF函数将传入的id按照下划线炸裂成两条数据//hint暗示,主要作用为类型推断时使用@FunctionHint(output = @DataTypeHint("ROW<word STRING>"))public static class SplitFunction extends TableFunction<Row> {...
函数通过调用registerFunction()方法在TableEnvironment中注册。当用户定义的函数被注册时,它被插入到TableEnvironment的函数目录中,这样Table API或SQL解析器就可以识别并正确地解释它。 2. 标量函数(Scalar Functions) 用户定义的标量函数,可以将0、1或多个标量值,映射到新的标量值。
开发流程:重要提示:eval函数无返回值,与标量函数不同。Flink TableFunction接口提供collect(T)方法来发送输出数据。将collect(T)应用到函数签名中,将实现标量函数的功能,从而体现单条数据输出多条数据的特性。在SQL中:利用SQL中的LATERAL TABLE()与JOIN、LEFT JOIN xxx ON TRUE操作结合实现。开发案例...
// SQL 中使用 tableEnv.createTemporaryView("sensor", sensorTable) tableEnv.registerFunction("hashCode", hashCode) val resultSqlTable = tableEnv.sqlQuery("select id, hashCode(id) from sensor") // 转换成流,打印输出 resultTable.toAppendStream[Row].print("table") resultSqlTable.toAppendStream[...
*/object FlinkSqlUDFTableFunction{defmain(args:Array[String]):Unit={//1.构建运行环境val env=StreamExecutionEnvironment.getExecutionEnvironment env.setParallelism(1)// 设置并行度为1//2.构建TableEnvval tableEnv=StreamTableEnvironment.create(env)//3.构建数据源val data=env.readTextFile("./data/word...