文章目录
前言
Fink在新发布的1.7版本中,不断完善和加强了SQL&Table API方面的功能支持。这使得在流计算过程中,用户同样能够运用熟悉的SQL语句来做数据处理,查询。但是相比于窗体的RDBMS而言,流计算过程中的SQL处理难免让人觉得不是很好理解,毕竟数据不是fixed-sized的,而是连续不断的。所以本文,笔者来聊聊这个略显抽象的概念:流计算过程中的表以及SQL查询的含义。
动态表和动态查询的概念
在流处理过程中,数据是连续的,所以当我们把这些连续接收到的数据记录汇聚到一起然后做呈现的时候,它其实是一种“动态”表。当不断有新的数据来到的时候,这个动态表就不断扩增。所以动态表在这里更恰当的比喻应该是一种状态表信息。当然鉴于这个表的空间有限(状态数据存储受限),后面来的数据要么会覆盖早期相同的数据,要么这个表中过期的数据会被移除。以此维护这个状态表的数据信息。当然,在流式计算中,每一条数据都有一个自带天然属性的信息,就是时间,它可以是process time,又或者说是event time。以下是一张历史访问频率动态表的数据内容信息,它在Flink内部是以State(3个字段域组成)的形式驻留。
SELECT * FROM RatesHistory;
rowtime currency rate
======= ==