Flink之DataStream API、Table API&SQL
Flink 根据使用的便捷性和表达能力的强弱提供了 3 层 API,由上到下,表达能力逐渐增强,比如 processFunction
,是最底层的 API,表达能力最强,我们可以用他来操作 state 和 timer 等复杂功能。Datastream API
相对于 processFunction
来说,又进行了进一步封装,提供了很多标准的语义算子给大家使用,比如我们常用的 window 算子(包括 Tumble, slide,session 等)。
最上面的 SQL
和 Table API
使用最为便捷,具有自身的很多特点:
我们从DataStream API、Table API、SQL依次看看使用方式
DataStream API
构成步骤
- 一、获取执行环境(execution environment)
- 二、读取数据源(source)
- 三、定义给予数据的转换操作(transformations)
- 四、定义计算结果的输出位置(sink)
- 五、触发程序执行(execute)
示例1:不同的数据来源
1 | package com.race.wc; |
示例2:定义给予数据的转换操作(transformations)
1、演示 flatMap、keyBy、sum的转换操作
1 | package com.race.wc; |
flatMap、keyBy都可以使用 Lambda 表达式,更直观简洁
注意 :使用 lambda表达式申明Java泛型时,需要显式声明类型信息.returns(Types.TUPLE(Types.STRING, Types.LONG))
1 | public static void main(String[] args) throws Exception { |
2、演示 max,maxBy,min,minby的转换操作
- max返回最大值
如果使用max,除了keyBy的字段和参与比较大小的字段,如果还有其他字段,为了返回结果对齐,返回的结果的其他字段就是第一次出现的字段 - maxBy 把最大值对应的元素全部返回
使用maxBy,除了keyBy的字段和参与比较大小的字段,如果还有其他字段,会返回最大值所在数据全部的数据,另外,maxBy有第二个的参数,用来确定当比较字段出现相同时,返回之前的还是现在的,默认返回之前的,设置为false则返回新的,设置为true返回之前的
1 |
|
Table API & SQL
构成步骤
- 一、创建表环境
- 二、创建输入表 source
- 三、创建输出表 sink
- 四、查询转换得到一个新的表
- 五、写入输出表
示例
1 | // 创建表环境 |