眾多的時序數(shù)據(jù)庫(Time Series Database)以及傳統(tǒng)的實時數(shù)據(jù)庫(Real Time Database),都采用自己的查詢語言,有的甚至只能使用 API 來做查詢。TDengine Database 從誕生的第一天起,就支持 SQL,將 SQL 做為自己的查詢語言,因為 TDengine 團隊認為 SQL 是世界上最簡單易用、最流行的查詢語言,為眾多程序員所喜愛,這樣能夠降低學習門檻和應用程序遷移成本。同時,為方便大家對時序數(shù)據(jù)進行分析處理,TDengine Database 對標準 SQL 進行了擴展。
與InfluxDB的查詢的簡單對比
InfluxDB 從 2.0 版起,采用 Flux 查詢語言,我們僅僅拿一個最簡單的例子來讓大家知道使用 SQL 和 Flux的難易程度。
假設要從庫 power 里查詢上海所有智能電表 smter 在過去的一個小時里每分鐘的電壓平均值,F(xiàn)lux 的查詢會是:
from(bucket:"power")
|> range(start:-1h)
|> filter(fn:(r) =>
r._measurement == "smeter" and
r._field = "voltage" and
r.location == "shanghai"
)
|> aggregateWindow(every: 1m, fn: mean)
如果用 TDengine 來寫,查詢語句會是:
select avg(voltage) from power.smeter where ts > now -1h and location = "shanghai" interval(1m)
對比兩種查詢語句,自然可以得出結論。
數(shù)據(jù)寫入:
InfluxDB、Prometheus 和 OpenTSDB 等眾多時序數(shù)據(jù)庫采用 schemaless 寫入,這對于不熟悉數(shù)據(jù)庫的開發(fā)者而言,很容易上手。TDengine 采用傳統(tǒng)的關系型模型,需要用戶定義 schema,對于數(shù)據(jù)寫入,增加了初學者的難度。為了解決這一問題,TDengine Database 從 2.4 版本起,開始支持 schemaless 寫入,方便初學者的數(shù)據(jù)寫入操作。
不僅如此,TDengine 現(xiàn)在支持 InfluxDB 的 LINE 格式寫入,現(xiàn)有 Telegraf 或其他數(shù)據(jù)采集應用不用修改代碼,只需將寫入的 URL 改為 TDengine Database 集群的 IP 地址即可。而且 TDengine 還支持 OpenTSDB 的多種協(xié)議,包括 Telnet、JSON 等數(shù)據(jù)的寫入,詳細請看《TDengine 高效數(shù)據(jù)寫入》。
SQL擴展
時序數(shù)據(jù)的分析處理有其特點,需要有一些特殊的分析函數(shù),這是傳統(tǒng)的關系型數(shù)據(jù)庫不支持的。為便于開發(fā)者使用,TDengine 提供了下列 SQL 擴展:
- interval: TDengine 按時間區(qū)間對采集的數(shù)據(jù)進行聚合,比如計算每 5 分鐘的電壓平均值
- fill: 在某個具體的時間點,并沒有數(shù)據(jù),但是 TDengine 可以根據(jù)這個時間點前后數(shù)據(jù)進行插值計算,提供給應用
- sliding: 滑動窗口,TDengine 可以每隔指定的時間間隔進行查詢計算
- last_row: 返回一張表某一列最后的非 NULL 值,這個對于 IoT 應用非常重要,因為設備的當前狀態(tài)是需要快速獲取的
- tavg: 時間加權平均,在工業(yè)互聯(lián)網(wǎng)中,該平均經(jīng)常被用到
- spread: 統(tǒng)計某列的最大值和最小值之差
- ……
TDengine 3.0 版本更新了大量時序數(shù)據(jù)特有函數(shù)和特色查詢,詳見《TAOS SQL》。
更多亮點 >>



互聯(lián)網(wǎng).png)



-1.png)












伙伴.png)



