FlinkSQL-自定义标量函数ScalarFunction

FlinkSQL-自定义标量函数ScalarFunction

  • 什么是标量函数
  • 标量函数的实现
  • 代码实现
  • 测试用例

什么是标量函数

Scalar Funcion类似于Map,一对一,输入一行数据输出一行数据

  • 用户定义的标量函数,可以将0、1或多个标量值,映射到新的标量值
  • 为了定义标量函数,必须在 org.apache.flink.table.functions 中扩展基类Scalar Function,并实现(一个或多个)求值方法
  • 标量函数的行为由求值方法决定

标量函数的实现

ScalarFunction 要求必须实现的方法

  • eval

代码实现

    //实现自定义的scalarFunction,实现取id的hash值
    public static class HashCode extends ScalarFunction{
        private int factor = 13;
        public HashCode(int factor) {
            this.factor = factor;
        }
        //必须为public名字必须叫eval
        public int eval(String str){
            return str.hashCode()*factor;
        }
    }

测试用例

        //流转换成表 Tuple3
        Table sourceTable = tableEnv.fromDataStream(dataStream, "f0 as id, f1 as ts, f2 as temp,pt.proctime");
        //在环境中注册UDF
        HashCode hashCode = new HashCode(5);
        tableEnv.registerFunction("hashCode",hashCode);
        //tableAPI
        Table resultTable = sourceTable.select("id,ts,hashCode(id)");
        tableEnv.toAppendStream(resultTable, Row.class).print();
        //SQL
        tableEnv.createTemporaryView("sensor",sourceTable);
        Table resultSqlTbale = tableEnv.sqlQuery("select id,ts,hashCode(id) from sensor");
        tableEnv.toAppendStream(resultSqlTbale,Row.class).print();

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