数据流和动态表| 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第12天
数据流和动态表
如何在数据流上执行SQL语句,说明流式处理中状态的概念
随处可见的流式数据
传统SQL和流处理
概述-数据流和动态表转换
在流上定义表
下图显示了单击事件流(左侧)如何转换为表(右侧)。当插入更多的单击流记录时,结果表将不断增长。
动态表:与表示批处理数据的静态表不同,动态表是随时间变化的。可以像查询静态批处理表一样查询它们。数据库表是INSERT、UPDATE和DELETE DML语句的stream 的结果,通常称为changelog stream。
连续查询
连续查询:
- 查询从不终止
- 查询结果会不断更新,产生一个新的动态表
在任何时候,连续查询的结果在语义上与以批处理模式在输入表快照上执行的相同查询的结果相同。
查询产生仅追加数据的动态表
两个连续查询对比
虽然这两个示例查询看起来非常相似(都计算分组计数聚合),但它们在一个重要方面不同:
- 第一个查询更新先前输出的结果,即定义结果表的changelog流包含INSERT和 UPDATE操作;
- 第二个查询只附加到结果表,即结果表的changelog流只包含INSERT操作。
Retract 消息产生
状态
需要存储每个用户的URL计数,以便能够增加该计数并在输入表接收新行时发送新结果。
数据流和动态表转换回顾
- 数据流和动态表之间的转换;
- 在数据流的查询不会终止;
- 查询可能会有状态,用来不断更新查询的结果。
不同数据处理保证的语义
- At-most-once:出现故障的时候,啥也不做。数据处理不保证任何语义,处理时延低;
- At-least-once:保证每条数据均至少被处理一次,一条数据可能存在重复消费。
- Exactly-once:最严格的处理语义,从输出结果来看,每条数据均被消费且仅消费一次,仿佛故障从未发生。

浙公网安备 33010602011771号