基于最新的v1.14.4 梳理下批流统一的用法cuiyaonan2000@163.com
官方的文档看的头晕,要把所有的都穿起来还是有难度.先基于其它码友的经验文章,在去看官网我觉得效果更好.
批流统一总的来说,使用上层的API以操作传统关系型数据库表的方式来进行计算
参考资料:
- 概览 | Apache FlinkDataStream API Integration | Apache Flink流式概念 | Apache Flink大数据之flink教程-TableAPI和SQL - 十一vs十一 - 博客园Flink SQL Connector(一)- Format & Kafka - 简书 概览 | Apache Flink --- 官方默认提供的source 和 sinkUser-defined Sources & Sinks | Apache Flink ----自定义source和sink的方法
Blink将批处理作业,视为流式处理的特殊情况。所以,blink不支持表和DataSet之间的转换,批处理作业将不转换为DataSet应用程序,而是跟流处理一样,转换为DataStream程序来处理。
因为批流统一,Blink planner也不支持BatchTableSource,而使用有界的StreamTableSource代替.
由上知道:
- Blink不支持 表 和 DataSet之间的转换,即批流统一不支持DataSet使用批流统一处理有界流和无界流,最终都是转换成DataStream的Api进行处理有界流使用StreamTableSource,无界流使用TableSource 作为批流统一的原始数据源.
创建表环境最简单的方式,就是基于流处理执行环境,调create方法直接创建:
//创建流式环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); //创建表环境 StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);
TableEnvironment 是 Table API 和 SQL 的核心概念。它负责:
在内部的 catalog 中注册 Table 注册外部的 catalog 加载可插拔模块执行 SQL 查询注册自定义函数 (scalar、table 或 aggregation)将 DataStream 或 DataSet 转换成 Table ----由此可见批流的操作对象是Table持有对 ExecutionEnvironment 或 StreamExecutionEnvironment 的引用
设置表环境环境变量可以看到在创建表环境StreamTableEnvironment 时,可以设置表环境的配置信息
当前版本还是不稳定,之前很多可用的配置都被取消了,官方能别这么着急发版本么cuiyaonan2000@163.com
如下是创建环境信息的方法
表TableEnvironment可以注册目录Catalog,并可以基于Catalog注册表. TableEnvironment会维护一个Catalog-Table表之间的map.
命名空间表(Table)是由一个“标识符”来指定的,由3部分组成(如果没有指定目录或数据库,就使用当前的默认值):
- Catalog名 ---- 如果连接进入同一个catalog,数据库则可以共享该命名空间下的所有表cuiyaonan2000@163.com数据库(database)名对象名(表名)
常规的(Table,表): 一般可以用来描述外部数据,比如文件、数据库表或消息队列的数据,也可以直接从 DataStream转换而来虚拟的(View,视图): 可以从现有的表中创建,通常是table API或者SQL查询的一个结果
常规表如上可知常规表,一般都是外部数据.来源可以是文件,kafka,mysql,mongodb,hive等
Flink的改变很大,很多历史博客的连接外部资源使用的是tableEnv.connect()这个方法,但是在最新的版本中该方法已经消失了. 参照官网的连接都是使用的sql方式.即以属性添加外部资源信息的方式,使用sql来注册外部资源cuiyaonan2000@163.com
表连接器&表格式
Filink提供了2个概念以连接外部资源(注入Kafka,Hive,Mongodb等),
- 表连接器(table connector): 表连接即通过类Sql的形式连接外部资源.表格式(table format): 表格式是一种存储格式,定义了如何将外部资源的信息映射到Flink内部自定义的格式上.



