该翻译原文来之flink官网dynamic_tables.html
动态表
SQL和关系代数的设计还没有考虑涉及到流数据中。因此,在关系代数(和SQL)和流处理之间没有什么概念上的差异。
本页面讨论了这些差异,并解释了Flink如何在无界数据上实现与在有界数据上使用常规数据库引擎获得相同的语义。
在数据流上的关系查询
下表比较了关与输入数据、执行和输出结果相关的传统关系代数和流处理。
关系代数/SQL | 流处理 |
---|---|
关系(或表)是有界的(多个)元组集合。 | 流是元组的无限序列。 |
在批处理数据(例如关系数据库中的表)上执行的查询可以访问完整的输入数据。 | 流查询不能在启动时访问所有数据,必须“等待”数据的流入。 |
批处理的查询在它生成固定大小的结果后终止。 | 流查询会根据接收到的记录不断地更新它的结果,并且永远不会完成。 |
尽管有这些差异,使用关系查询和SQL处理流并非不可能的。高级关系数据库系统提供了一个称作物化视图的特性。物化视图被定义为SQL查询,就和普通的虚拟视图一样。与虚拟视图不同的是,物化视图缓存查询的结果,以便在访问视图时不需要计算查询。对于缓存的一个常见挑战是防止缓存提供过时的结果。当其定义查询的基本表被修改时,物化视图就会过时。即时视图维护是一种技术,它可以在基本表