流查询
查询默认不受限制
默认情况下,Timeplus 的查询行为不同于传统的 SQL ,后者回答了已经发生的问题。 相反,Timeplus 的查询试图回答目前正在实时发生的事情的问题,并在新事件进入系统时不断更新答案。
Timeplus 查询正在运行于一个无边界流中。 在大多数情况下,除非用户取消查询,否则查询不会停止。 例如,下面的查询将在执行查询后实时返回输入 Timeplus 系统的流中的所有事件。 每个新事件将触发一个新的查询结果。 除非用户取消查询,否则这个查询不会停止。
select * from my_stream
无边界查询可以通过使用函数 table(),转换为有边界的查询,当用户想询问发生了什么事情时,就像传统的 SQL 一样。 table() 函数可以用来装饰流。 例如:下面的查询将返回在执行查询时在流中已存在的所有事件。 一旦所有结果被退回用户,查询将会终止,它不会等待新的事件。
select * from table(my_stream)
如何触发串流查询
基于数据如何汇总的流式查询分为三类。
类别 | 描述 | 触发者 |
---|---|---|
非聚合 | 每个事件处理,例如尾、过滤、转换/正常化 | 事件到达时 |
窗口聚合 | 在同一窗口中分组事件 | 窗口尾部和水标记 |
全局聚合 | 从现在开始一直持续到 | 固定间隔,默认每 2 秒 |
如果您看到一些新的词句,请不要担心。 让我们更多地探索它们。
非聚合
聚合是将不同事件的数据合并为一个或多个新数据的过程。 有些查询不涉及任何聚合,例如:
Tail
列出所有收到的数据,例如:
select * from my_stream
筛选
只显示特定列或数据匹配特定模式,如:
select c1,c2 from weblogs where http_code>=400
变换
对于每个事件,转换数据以删除敏感信息,或转换类型,如:
select
concat(first_name,' ', last_name) as full_name,
replace_regex(phone,'(\\d{3})-(\\d{3})-(\\d{4})','\\1-***-****') as phone
from user_activities