Calcite中的流式SQL

Calcite的流式SQL设计兼容SQL标准,提供翻滚窗、跳动窗、滑动窗等功能。查询中,Stream关键字标识流式查询,不支持流与表混合查询。窗口功能包括行组窗、单调和准单调概念,支持DML语句如Create View和Insert AS select。目前已完成流上的基础查询和部分窗口功能,未来计划完善流与流的Join等高级功能。
摘要由CSDN通过智能技术生成

Calcite中的流式SQL


Calcite中的流式SQL总体设计思路

总体语法应该兼容SQL,这个是和目前流处理SQL的发展趋势是一致的。
如果部分功能标准SQL中没有包含,则尽量采用业界标杆(Oracle)。比如模式匹配的功能,目前流处理中还没有针对语法达成共识,那么在设计上,就采用Oracle data warehouse的Match Recognize的方式。还有滑窗功能。
如果还有功能目前业界标杆都没有,那么就通过函数的方式拓展,翻滚窗口和跳动窗口,这两个窗口在标准SQL中都是不包含的,所以就采用了Ceil,Tumble,Hop等函数的方式来实现功能。
总体思路就是在兼容标准SQL的基础上做尽可能少的拓展,保证语义和标准SQL一致,尽最大可能减少私有化的语法

Calcite StreamSQL说明

  1. 在DDL中明确定义schema是流Or表,TODO:官网没有示例,待补充
    比如有三张schema:
    Orders (rowtime, productId, orderId, units) - 既是表,又是流
    Products (rowtime, productId, name) - 表
    Shipments (rowtime, orderId) - 流
  2. 查询中如果包含Stream关键字,就是流式查询,如果不包含,就是表查询。表查询可以马上返回结果并结束,流式查询只会输出结果但并不结束。
    比如下面一个流查询示例:
SELECT STREAM *
FROM Orders;

  rowtime | productId | orderId | units
----------+-----------+---------+-------
 10:17:00 |        30 |       5 |     4
 10:17:05 |        10 |       6 |     1
 10:18:05 |        20 |       7 |     2
 10:18:07 |        30 |       8 |    20
 11:02:00 |        10 |       9 |     6
 11:04:00 |        10 |      10 |     1
 11:09:30 |        40 |      11 |    12
 11:24:11 |        10 |      12 |     4

表查询示例:

SELECT *
FROM Orders;

  rowtime | productId | orderId | units
----------+-----------+---------+-------
 08:30:00 |        10 |       1 |     3
 08:45:10 |        20 |       2 |     1
 09:12:21 |        10 |       3 |    10
 09:27:44 |        30 |       4 |     2

4 records returned.

流和表的查询不能混用,否则会报错

SELECT * FROM Shipments;

ERROR: Cannot convert stream 'SHIPMENTS' to a table

SELECT STREAM * FROM Products;

ERROR: Cannot convert table 'PRODUCTS' to a stream
  1. 其他过滤,排序,having等操作和标准sql一致,不再举例。
  2. 子查询只需要在外层语句写Stream关键字即可,内层写了无效。
    如:
SELECT STREAM rowtime, productId
FROM (
  SELECT TUMBLE_END(rowtime, INTERVAL '1' HOUR) AS rowtime,
    productId,
    COUNT(*) AS c,
    SUM(units) AS su
  FROM Orders
  GROUP BY TUMBLE(rowtime, INTERVAL '1' HOUR), productId)
WHERE c > 2 OR su > 10;

  rowtime | productId
----------+-----------
 10:00:00 |        30
 11:00:00 |        10
 11:00:00 |        40

窗口功能说明

翻滚窗(Tumbling window࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值