在(zai)當今的(de)(de)(de)車(che)聯網平臺中,車(che)輛(liang)上報的(de)(de)(de)數據(ju)量巨大且更新頻繁,包括車(che)輛(liang)傳(chuan)感器數據(ju)、駕駛行為數據(ju)、GPS軌跡數據(ju)等。這就需要流(liu)式計算來(lai)實(shi)時處理(li)和(he)(he)分析(xi)這些數據(ju),在(zai)數據(ju)產生/接入的(de)(de)(de)時候就立刻產生價值。比如(ru),可以實(shi)時監測(ce)和(he)(he)分析(xi)車(che)輛(liang)的(de)(de)(de)健康(kang)狀(zhuang)態,預測(ce)可能(neng)發(fa)生的(de)(de)(de)故障(zhang),提供及(ji)時的(de)(de)(de)維修建議,監控車(che)輛(liang)的(de)(de)(de)運行軌跡是否正常(chang)、從而確保車(che)輛(liang)和(he)(he)業務的(de)(de)(de)安全(quan)和(he)(he)穩定。
在流(liu)計算(suan)中,數(shu)(shu)據是(shi)以源源不(bu)斷的(de)(de)(de)流(liu)(stream)的(de)(de)(de)形式(shi)到達的(de)(de)(de)。由(you)于流(liu)數(shu)(shu)據是(shi)無界的(de)(de)(de)(理論上(shang)數(shu)(shu)據會一直產(chan)生),為了劃(hua)分最小的(de)(de)(de)計算(suan)單元,就(jiu)有了窗(chuang)(chuang)口的(de)(de)(de)概念。通過不(bu)同(tong)邏輯的(de)(de)(de)窗(chuang)(chuang)口劃(hua)分,流(liu)計算(suan)可(ke)以滿足(zu)不(bu)同(tong)的(de)(de)(de)業務(wu)需求。
在 TDengine 的(de)(de)(de)(de)流計算中,對(dui)數據(ju)(ju)集(ji)提(ti)供了(le) 5 種特(te)色(se)的(de)(de)(de)(de)窗(chuang)(chuang)口(kou)查詢:。簡單來講:分別(bie)是(shi)通過(guo)(guo)固定時間間隔劃分窗(chuang)(chuang)口(kou)的(de)(de)(de)(de) interval , 通過(guo)(guo)布爾值劃分窗(chuang)(chuang)口(kou)的(de)(de)(de)(de) state_window, 通過(guo)(guo)狀態(tai)持續時間劃分窗(chuang)(chuang)口(kou)的(de)(de)(de)(de) session , 通過(guo)(guo)數據(ju)(ju)行數劃分窗(chuang)(chuang)口(kou)的(de)(de)(de)(de) count_window,通過(guo)(guo)自定義表(biao)達式制定規則的(de)(de)(de)(de) event_window。每一種窗(chuang)(chuang)口(kou)功能,都(dou)包含了(le)很多典(dian)型的(de)(de)(de)(de)業務(wu)需求,它們使(shi) TDengine 在車(che)聯網行業中發揮(hui)了(le)更重要的(de)(de)(de)(de)作用。
以(yi)通過布爾值劃分(fen)窗(chuang)口的(de) state_window 舉例:用(yong)戶可以(yi)通過對車(che)(che)輛(liang)移動狀態進行移動/靜止的(de)窗(chuang)口劃分(fen),然后(hou)實時(shi)計算(suan)獲取車(che)(che)輛(liang)的(de)每次啟(qi)停的(de)時(shi)間(jian)(jian)、位(wei)置、中(zhong)間(jian)(jian)耗時(shi)。通過類似這樣的(de)語句,就可以(yi)做到實時(shi)掌握車(che)(che)輛(liang)的(de)移動狀態。再通過與實時(shi)數據的(de)對比,就可以(yi)及時(shi)對超(chao)時(shi)/異常停車(che)(che)的(de)車(che)(che)輛(liang)發出告警。
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);
除此(ci)之外,用戶還(huan)可以通(tong)(tong)過(guo)(guo)車輛采集到的各種信號值,從(cong)而(er)通(tong)(tong)過(guo)(guo)業務邏輯自定義出兩種狀態(tai)。
通(tong)過 CASE WHEN 的邏輯,用戶自(zi)定義地設置這個窗口:STATE_WINDOW( CASE WHEN speed >= xxx THEN true ELSE false END),從而滿足更(geng)靈活(huo)的業務需(xu)求。
本文僅以此窗口為例,而對于其他更多的窗口的流計算應用場景,請點擊這里,申請演示。


























