一、概述

Table 是 Flink Table API 的核心操作对象,提供了流批统一的数据操作行为定义。对于批处理 Table 是静态表,对于流计算 Table 是动态表。动态表在 Flink 中抽象为 Table 接口。与表示批处理数据的静态表相比,动态表随时间而变化。将 SQL 查询作用于动态表,查询会持续执行而不会终止,叫作连续查询。

以 $Count$ 运算为例,对于静态表而言,$Count$ 是一个确定的值,而连续查询则会随着数据持续进入动态表,持续不断地更新 $Count$ 结果。从这个角度来说,流上的 SQL 实际上给出的总是中间结果。

二、Table Source

TableSource 提供了从外部系统(消息队列,KV 存储,数据库,文件系统等)接入数据,之后洼册到 TableEnvironment 中,然后可以通过 Table API 或者 SQL 进行查询。

三、Table

3.1. 架构设计

3.1.1. Table

Table 是 Table API 的核心接口,提供了常见的 SQL 数据操作接口。

table

3.1.2. TableImpl

如同 DataStream,Table 也有各种不同的变体,在 Flink 中的 DQL 查询语义中有7种可以相互转换的 Table,不同类型的 Table 之间的转换关系如图所示:

四、Table Sink

TableSink 提供了将 Flink 内部注册的 Table 中的数据写出到外部系统(Es,Hbase;消息队列数据库,文件系统等)

DynamicTableSink

五、总结