Scalar function 的输入可以是 0、1 ,以及多个标量(scalar values),但是输出的是一个标量。
在pom.xml
中添加flink-table-common
的依赖。
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-common</artifactId> <version>1.11-byted-SNAPSHOT</version> <!--设置为 provided,表示依赖关系仅在编译和测试时有效。这意味着在打包的时候不会打入 jar 包。--> <scope>provided</scope> </dependency>
代码实现。
通过继承org.apache.flink.table.functions.ScalarFunction
实现,并且需要实现一个或多个 eval 函数。eval 函数输入可以是多个参数。
本文提供了一个简单的 scalar function 的示例,作用是输入一个 String 类型,返回一个 int 类型的 hash 值。
public class HashCode extends ScalarFunction { //0.必须实现。 public int eval(String s) { return s.hashCode() * 100; } //1.如果输入的参数类型是复杂类型,需要通过 getParameterTypes 指定入参的类型。 @Override public TypeInformation<?>[] getParameterTypes(Class<?>[] signature) { TypeInformation[] typeInformation = new TypeInformation[1]; // 入参是 String 类型。 typeInformation[0] = Types.STRING; return typeInformation; } //2.如果返回的数据类型是复杂类型,需要通过 getResultType 指定返回数据的类型。 @Override public TypeInformation<?> getResultType(Class<?>[] signature) // 返回类型是 int。 return Types.INT; } }