需求:对Storm进行CQL二次开发
CQL,持续查询语言,用于数据流上的查询语言。
相对于标准SQL,CQL加入了窗口的概念,使得数据可以一直保存在内存中,由此可以快速进行大量内存计算
特点:
-
使用简单
语法与标准SQL类似
-
功能丰富
包含标准SQL的各类基本表达式,特别针对流处理场景增加了窗口、窗口前过滤、窗口后过滤、并发度设置等功能,满足多种实时业务处理场景。
-
易于拓展
提供了拓展接口,用户可以自定义输入、输出、序列化、反序列化等。
-
易于调试
提供了详细的异常码说明。
常用概念
-
window
窗口是流处理中解决事件的无边界及流动性的一种重要手段,把事件流在某一个时刻变成静态的视图,以便进行类似数据库表的各种查询操作。
// -----------------
// 查询结果只包含 name、score 以及内置字段 objectId、createdAt 和 updatedAt
// 默认返回 100 条数据,使用 limit 来更改
select name,score from GameScore
// 根据 name 查找
select * from GameScore where name='dennis'
// 根据 name 和 score 同时查找
select * from GameScore where name is exists and score > 80 and score <= 100
// 分页查找,从第 100 条开始向后查找 10 条数据
select * from GameScore limit 100,10
// 根据 score 和 name 排序
select * from GameScore order by score,+name desc
// -----------------
// 插入一条数据
insert into GameScore(name, score) values('leancloud', 100)
// -----------------
// 更新一条数据,必须提供 objectId
update GameScore set score=90 where objectId='558e20cbe4b060308e3eb36c'
// -----------------
// 删除一条数据,必须提供 objectId
delete from GameScore where objectId='558e20cbe4b060308e3eb36c'
建议
CQL 最终还是转换成 REST API 里查询部分提到的各种 where 条件,因为多了一层转换,理论上会比直接使用 where
查询慢一点。并且 CQL 对长度有所限制,要求在 4096 字节以内。
此外,我们推荐查询语句都采用占位符的方式,使用占位符的查询语句将有机会被缓存复用,避免重复解释的开销