小 T 導讀:作為一款典型的時序數據庫(Time-Series Database)產品,TDengine 被廣泛運(yun)用于物聯(lian)網、工業(ye)互聯(lian)網、車聯(lian)網、IT 運(yun)維、能源、金融等領(ling)域。TDengine 本身提(ti)供了大量的計(ji)算(suan)(suan)函數,在很多(duo)場(chang)景(jing)下,用戶(hu)都不需(xu)(xu)要(yao)自己編程來實現某些(xie)計(ji)算(suan)(suan)功(gong)能。當然(ran),隨著場(chang)景(jing)的不斷增多(duo),用戶(hu)提(ti)出了越來越多(duo)的需(xu)(xu)求,TDengine 也在不斷地演進和提(ti)升。
經過研發同學(xue)的不懈努力(li),TDengine 2.6 版本(ben)正式發布了(le)(le)。該版本(ben)帶(dai)來眾多新(xin)特性,一方面(mian)是(shi)優化了(le)(le) SQL 語(yu)法(fa),一方面(mian)是(shi)增加了(le)(le)大量的計算函數,以(yi)支持用戶的更多使用場景。該版本(ben)還修復了(le)(le)之前版本(ben)存在的一些 bug。
下(xia)面(mian)具體來看(kan)一下(xia),2.6 版(ban)本(ben)帶來的(de)重要更新。
SQL 語法優化
- 在新的 SQL 語法中,TIMESTAMP 支持縮寫
在 SQL 語(yu)句中用到的(de)時間戳,可以只提供日期,比如 “2022-02-02”,系統自動將其轉換(huan)為(wei)“2022-02-02 00:00:00”。
比如在之前的版(ban)本中,執行以下(xia)語句:
taos> select last(ts), sum(f1) from t1987 where ts>="2017-07-15" interval(1m) ;
TDengine 會報(bao)錯:
DB error: invalid SQL: invalid timestamp (0.000065s)
我們必須這樣寫:
select last(ts), sum(f1) from t1987 where ts>="2017-07-15 00:00:00.000" interval(1m)
在 2.6 版本(ben)中,可以只提供(gong)日期部分(fen)了。
- 增強了 LIKE 通配符使用的校驗規則
當 LIKE 匹(pi)配字符(fu)為(wei)字符(fu)串時,SQL 才可以被解析。
- 新增多個時間窗口關鍵詞
_WSTART:窗口起始時間
_WSTOP:窗口結束時間
_WDURATION(precision):窗口持續時(shi)間
_QSTART: 查(cha)詢起(qi)始時間
_QSTOP: 查詢結束時間
_QDURATION: 查詢(xun)持續時間
- 建立明確的轉義字符表
提(ti)供(gong)了明確的轉義規則。
新增函數
- 新增聚合函數
HYPERLOGLOG() :采? hyperloglog 算法,估算某(mou)列的基數。
SELECT HYPERLOGLOG(field_name) FROM { tb_name | stb_name } [WHERE clause];
MODE():返回 database 中出現頻(pin)率最高的值,若(ruo)存在多個(ge)頻(pin)率相同的最高值,輸(shu)出空。
HISTOGRAM():統計(ji)數據按照(zhao)用戶指定(ding)區間(jian)的分布(bu)。
ELAPSED():表達了(le)統(tong)計(ji)(ji)周期內連續的(de)(de)時(shi)間長度,和 TWA 函(han)數配合使用(yong)可以計(ji)(ji)算統(tong)計(ji)(ji)曲(qu)線下(xia)的(de)(de)面(mian)積。在通過(guo) INTERVAL 子句指定(ding)窗口的(de)(de)情況(kuang)下(xia),統(tong)計(ji)(ji)在給定(ding)時(shi)間范(fan)圍(wei)內的(de)(de)每個(ge)窗口內有數據覆蓋的(de)(de)時(shi)間范(fan)圍(wei);如果(guo)沒有 INTERVAL 子句,則返回(hui)整(zheng)個(ge)給定(ding)時(shi)間范(fan)圍(wei)內的(de)(de)有數據覆蓋的(de)(de)時(shi)間范(fan)圍(wei)。
- 新增多個時間相關函數
NOW() :返回(hui)客(ke)戶端(duan)當前系統時間。
TODAY() :返(fan)回(hui)客戶(hu)端當日(ri)零(ling)時的(de)系統時間(jian)。
TIMEZONE() :返回客戶端當(dang)前時區信息。
TO_ISO8601() :將(jiang) UNIX 時(shi)間戳(chuo)轉換(huan)成(cheng)為(wei) ISO8601 標準的日期(qi)時(shi)間格式,并附(fu)加客戶端時(shi)區信息。
TO_UNIXTIMESTAMP():將日期(qi)時(shi)(shi)間(jian)格式字符(fu)串(chuan)轉換成 UNIX 時(shi)(shi)間(jian)戳,輸入(ru)字符(fu)串(chuan)內包含時(shi)(shi)區信(xin)息(xi)也會做相應轉換。
TIMETRUNCATE() :將時間戳按照指定(ding)的時間單(dan)位進(jin)行(xing)截斷。
TIMEDIFF() :計算兩個時間戳之間的差值,并近似(si)到指(zhi)定(ding)時間單位(wei)所指(zhi)定(ding)的精(jing)度。
- 新增多個字符串處理函數
LOWER() :將(jiang)字符串(chuan)參數值轉換為全小寫字母。
UPPER() :將字符串(chuan)參數值轉換(huan)為全大(da)寫(xie)字母。
CONCAT() :字符串連接函數。
CONCAT_WS() :帶分隔符(fu)的(de)字符(fu)串連接函數。
SUBSTR() :從(cong)源字符串(chuan) str 中(zhong)的(de)指定位置 pos 開始(shi)取(qu)一個長度為(wei) len 的(de)子串(chuan)并(bing)返回。
LENGTH() :以字(zi)節計(ji)數的字(zi)符串長度。
CHAR_LENGTH() :以字(zi)符計數的字(zi)符串長度。
- 新增選擇函數
TAIL():返(fan)回(hui)跳過最后 offset_val 個,然后取(qu)連續 k 個記錄(lu),不忽略 NULL 值。
SELECT TAIL(field_name, k, offset_val) FROM {tb_name | stb_name} [WHERE clause];
UNIQUE(): 返回該列的數值(zhi)首次出現的值(zhi)。
SELECT UNIQUE(field_name) FROM {tb_name | stb_name} [WHERE clause];
- 其他新增計算函數
STATEDURATION():返回滿(man)?某個條件的連續(xu)記錄(lu)的時間?度(du),結果作為新的?列追加在每?后?。
STATECOUNT():返回滿?某個條件的(de)連續記錄的(de)個數(shu),結(jie)果作為新的(de)?列(lie)追(zhui)加在每?后?。
CAST():數據類型轉(zhuan)換函數,輸入參數 expression 支(zhi)(zhi)持普通列、常量(liang)、標量(liang)函數及它們之(zhi)間(jian)的四(si)則(ze)運算(suan),不支(zhi)(zhi)持 tag 列,只適用于 select 子句中。
MAVG():計算連續 k 個(ge)值的移動平均數(shu)(moving average)。
典型的數(shu)學函數(shu) ABS、COS、LOG 等。
增(zeng)強(qiang)了 DIFF() 函(han)數,支持忽略負值(zhi)。
taosAdapter 更新
- taosAdapter 支持 Prometheus 數據讀寫分離的集群方案 remote_read 和 remote_write。
- taosAdapter 增加新的 RESTful 接口,支持無上限的數據批量拉取功能,保證應用能夠獲取任意大小的查詢結果,并且大大減小查詢的時延。
- JDBC-RESTful 支持 taosAdapter 的多次批量返回的數據結果。
當前版本也修復了之前版本中發現的一些(xie) bug,具體可參(can)見完整的。
2.6 版本的哪些功能是你期待已久的?趕快下載體驗吧://www.yakult-sh.com.cn/all-downloads。
此外,TDengine 的(de)企(qi)業(ye)版本還提供了 DELETE 功能,可以刪(shan)除指定表或超級(ji)表中(zhong)的(de)數據。感興(xing)趣的(de)用(yong)戶可以聯系我(wo)們(men),試用(yong)體(ti)驗。



























