在当今的车联网平台中,车辆上报的数据量巨大且更新频繁,包括车辆传感器数据、驾驶行为数据、GPS轨迹数据等。这就需要流式计算来实时处理和分析这些数据,在数据产生/接入的时候就立刻产生价值。比如,可以实时监测和分析车辆的健康状态,预测可能发生的故障,提供及时的维修建议,监控车辆的运行轨迹是否正常、从而确保车辆和业务的安全和稳定。
在流计算中,数据是以源源不断的流(stream)的形式到达的。由于流数据是无界的(理论上数据会一直产生),为了划分最小的计算单元,就有了窗口的概念。通过不同逻辑的窗口划分,流计算可以满足不同的业务需求。
在 TDengine 的流计算中,对数据集提供了 5 种特色的窗口查询:https://docs.taosdata.com/reference/taos-sql/distinguished/。简单来讲:分别是通过固定时间间隔划分窗口的 interval , 通过布尔值划分窗口的 state_window, 通过状态持续时间划分窗口的 session , 通过数据行数划分窗口的 count_window,通过自定义表达式制定规则的 event_window。每一种窗口功能,都包含了很多典型的业务需求,它们使 TDengine 在车联网行业中发挥了更重要的作用。
以通过布尔值划分窗口的 state_window 举例:用户可以通过对车辆移动状态进行移动/静止的窗口划分,然后实时计算获取车辆的每次启停的时间、位置、中间耗时。通过类似这样的语句,就可以做到实时掌握车辆的移动状态。再通过与实时数据的对比,就可以及时对超时/异常停车的车辆发出告警。
CREATE stream overtime_parking INTO overtime_parking_output_stb AS
SELECT
_wstart,
_wend,
TIMEDIFF(_wstart, _wend, 1s) AS sparking_time,
LAST(address) address,
speed_status,
COUNT(*) AS record_count,
tbname
FROM
stb_cold_gps PARTITION BY tbname state_window(speed_status);
除此之外,用户还可以通过车辆采集到的各种信号值,从而通过业务逻辑自定义出两种状态。
通过 CASE WHEN 的逻辑,用户自定义地设置这个窗口:STATE_WINDOW( CASE WHEN speed >= xxx THEN true ELSE false END),从而满足更灵活的业务需求。
本文仅以此窗口为例,而对于其他更多的窗口的流计算应用场景,请点击这里,申请演示。