StreamCQL是一个类SQL的声明式语言,它用于在流(streams)和可更新关系(updatable relation)上的可持续查询,目的是在流处理平台分布式计算能力之上,通过使用简易通用的类SQL语言,使得业务逻辑的开发变得统一和简易。在功能上,StreamCQL弥补了传统流处理平台上一些基本业务功能的缺失,除了过滤、转换等基本SQL能力之外, 还引入基于内存窗口的计算、统计、关联等能力,以及流数据的拆分、合并等功能。
StreamCQL重要概念介绍
- 流:流是一组(无穷)元素的集合,流上的每个元素都属于同一个schema;每个元素都和逻辑时间有关;即流包含了元组和时间的双重属性。流上的任何一个元素,都可以用Element<tuple, Time>的方式来表示,tuple是元组,包含了数据结构和数据内容,Time就是该数据的逻辑时间。
- Window:窗口(window)是流处理中解决事件的无边界(unbounded)及流动性的一种重要手段,把事件流在某一时刻变成静态的视图,以便进行类似数据库表的各种查询操作。在stream上可以定义window,窗口有两种类型,时间窗口(time-based)和记录窗口(row-based)。两种窗口都支持两种模式,滑动(slide)和跳动(tumble)。
- 算子:算子是包含了一系列运算关系的组合,比如聚合算子,就包含了查询(select),窗口,聚合(aggregate),排序(sort),窗口前过滤(filter before window),窗口之后的过滤(where),聚合之后的过滤(having)等功能,除此之外,还有流拆分算子,流合并算子等。StreamCQL中的算子分为三类:输入算子、输出算子、功能算子。
StreamCQL架构介绍
StreamCQL总体架构如下图所示:
图1 StreamCQL架构图
StreamCQL的总体架构分为引擎、功能、业务接口三层,每隔层次之间分工明确,责任清晰,