1.tdengine 流计算触发模式 
在创建流计算时可以通过trigger 命令指定流计算的触发模式,对于非窗口计算,流计算触发是实时的,
对于窗口计算,提供如下3种触发模式。
at_once: 数据写入后立即触发。 
window_close:窗口关闭时触发(默认触发模式,窗口关闭由事件时间决定,可配合 watermark使用)
max_delay:若窗口关闭则触发计算,若窗口未关闭,且未关闭时长超过 max_delay 指定的时间,则触发计算。
max_delay 在窗口关闭时立即触发计算。当数据写入后,若流计算触发的时间超过 max delay 指定的时间,则立即 
触发计算。

2.流计算的窗口关闭 
流计算的核心在于以事件时间(即写入记录中的时间戳主键)为基准来计算窗口的关闭时间, 
而不是依赖于 tdengine 服务器的时间。采用事件时间作为基准可以有效避免客户端与服务器时间不一致带来的问题。
并且能够妥善解决数据乱序写入的挑战。
为了进一步控制数据乱序的容忍度,流计算一如了 watermark 机制,在创建流时用户可以通过 sream_option 参数 
指定 watermark 的值,该值定义了数据乱序的容忍上界,默认情况为0;

3.流计算对于过期数据的处理策略。
对于已关闭的窗口,再次落入该窗口中的数据会被标记为过期数据,tdengine 对于过期数据提供两种处理模式。
由 ignore  expired 选项指定。
重新计算: ignore expired 0 ,表示从TSDB 中重新查找对应窗口的所有数据并计算得到最新结果。
直接丢弃,即 ignore expired 1 ;默认配置,表示忽略过期数据。
无论采用哪种处理模式, watermark 都应该被妥善设置,以便得到正确结果。直接丢弃模式,或避免频繁
触发重新计算带来的性能开销。

4.流计算对于修改数据的处理策略 
tdengine 对于修改数据提供两种处理模式。具有处理方式由 ignore update 选项指定。 
检查数据是否被修改,即 ignore update 0;默认配置,如果被修改,则重新计算对应窗口。
不检查数据是否被修改,全部按增量数据计算, ignore udpate 1; 

流计算的其他策略。 
#写入已存在的超级表 
当流计算结果需要写入已存在的超级表时,应确保 stb_name 列 与 subquery 输出结果之间对应关系正确。
如果 stb_name 列与 subquery 输出结果的位置,数量完全匹配,那么不需要显示指定对应关系。

虽然流计算可以将结果写入已经存在的超级表,但不能让两个已经存在的流计算向同一张表中写入
结果数据。这是为了避免数据冲突和不一致,确保数据的完整性和准确性。

#清理流计算的中间结果。
delete mark time; 
#删除流计算任务。
drop stream stream_name; 
#查看流计算任务。
show streams; 
#暂停流计算任务。 
pause stream stream_name; 
#恢复流计算任务。

resume stream   [ignore expired]  stream_name;

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐