flink动态表的概念详解

2020-07-05 00:00:00 视图 查询 更新 动态 物化

传统的数据库SQL和实时SQL处理的差别还是很大的,这里简单列出一些区别:

尽管存在这些差异,但使用关系查询和SQL处理流并非不可能。关系数据库系统提供称为物化视图的功能。物化视图定义为SQL查询,就像常规虚拟视图一样。与虚拟视图相比,物化视图缓存查询的结果,使得在访问视图时不需要执行查询。缓存的一个常见挑战是避免缓存提供过时的结果。物化视图在修改其定义查询的基表时会过时。Eager View Maintenance是一种在更新基表后立即更新实例化视图的技术。

如果我们考虑以下内容,Eager View Maintenance和流上的SQL查询之间的联系就变得很明显:

  • 数据库表是INSERT,UPDATE和DELETEDML语句流的结果,通常被称为更新日志流。
  • 物化视图定义为SQL查询。为了更新视图,查询需要持续处理视图源表的更改日志流。
  • 物化视图是流式SQL查询的结果。

有了上面的基础,下面可以介绍一下动态表的概念了。

动态表和持续不断查询

动态表flink table api和SQL处理流数据的核心概念。与静态表相比,动态表随时间而变化,但可以像静态表一样查询动态表,只不过查询动态表需要产生连续查询。连续查询永远不会终止,会生成动态表作为结果表。查询不断更新其(动态)结果表以反映其(动态)输入表的更改。终,动态表上的连续查询与定义物化视图的查询非常相似。

值得注意的是,连续查询的结果始终在语义上等同于在输入表的快照上执行批处理的到的相同查询结果。

下图显示了流,动态表和连续查询的关系:

  1. 数据流被转化为动态表
  2. 在产生的动态表上执行连续不断的查询,产生一个动态结果表。
  3. 结果动态表再次被转化为数据流。

注意:动态表重要的是逻辑概念。在查询执行期间,动态表不一定(完全)物化。

在下文中,会以schema如下的点击事件流来解释动态表和连续不断的查询。

[
  user:  VARCHAR,   // the name of the user
  cTime: TIMESTAMP, // the time when the URL was accessed
  url:   VARCHAR    // the URL that was accessed by the user
]

相关文章