* 将Table转换成DataStream
* 动态表(Dynamic Tables)
* 动态表是Flink对流数据的Table API和SQL支持的核心概念
* 与表示批处理数据的静态表不同,动态表是随时间变化的
* 持续查询(ContinuousQuery)
* 动态表可以像静态的批处理表一样进行查询,查询一个动态表会产生持续查询(Countinuous Query)
*
*
* 动态表和持续查询:
* 流式表查询的处理过程:
* 1.流被转换为动态表
* 2.对动态表计算连续查询,生成新的动态表
* 3.生成的动态表被转换回流
*
* 从概念上来说,流的每个数据记录,都被解释为对结果表的插入(Insert)修改操作
* 持续查询:
将动态表转换成DataStream:
与常规的数据库表一样,动态表可以通过插入(Insert)、更新(Update)和删除(Delete)更改,进行持续的修改
将动态表转换为流或将其写入到外部系统中时,需要对这些更改进行编码
仅追加(Append-only)流
-仅通过插入(Insert)更改来修改的动态表,可以直接转换为仅追加流
撤回(Retract)流
-撤回流时包含了两类消息的流:添加(Add)消息和撤回(Retract)消息
Upsert(更新插入)流:
-Upsert流也包含两种类型的消息:Upsert消息和删除(Delete)消息
时间特性(Time Attributes)
基于时间的操作(比如Table API和SQL中窗口操作),需要定义相关的时间语义和时间数据来源信息
Table可以提供一个逻辑上的时间字段,用于在表处理程序中,指示时间和访问相应的时间戳
时间属性,可以时每个表schema的一部分
处理时间语义下,允许表处理程序根据时间的本地时间生产结果,他是时间的最简单概念,它既不需要提取时间戳,也不需要生产watermark
由DataStream转换成表时指定
在定义Schema期间,可以使用.proctime,指定字段名名定义处理时间字段
在这个proctime属性智能通过附属逻辑字段,来扩展物理schema。因此,智能在schema定义的末尾定义它
定义事件时间(Event Time)
事件时间语义,允许表处理程序根据每个记录中包含的时间生产结果
定义事件时间,同样有三种方法:
由DataStream转换成表时指定
定义Table Schema时指定
在创建表的DDL中定义