无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

搞不清 TDengine 的“復雜”查詢?一文讓它變簡單

小 T 導讀:作為一款專業的時序數據庫(Time Series Database,TSDB),為滿足用(yong)戶在不(bu)同(tong)場景(jing)下(xia)的查(cha)(cha)詢(xun)需求,TDengine 提供了豐富的查(cha)(cha)詢(xun)功能。除(chu)了一(yi)些主要的查(cha)(cha)詢(xun)外,還(huan)包(bao)括多(duo)表(biao)聚合查(cha)(cha)詢(xun)、降采樣查(cha)(cha)詢(xun)及連(lian)續(xu)查(cha)(cha)詢(xun),本文將從實際操作層面對這三種特殊查(cha)(cha)詢(xun)進行(xing)解(jie)讀。

查詢數據

主要查詢功能

TDengine 采用 SQL 作為查詢(xun)語言,應(ying)用程(cheng)序可以(yi)通(tong)過(guo)(guo) REST API 或連接器發(fa)送 SQL 語句,用戶還可以(yi)通(tong)過(guo)(guo) TDengine 命令(ling)行工具 taos 手(shou)動執行 SQL 即席查詢(xun)(Ad-Hoc Query)。TDengine 支持如下查詢(xun)功能:

  • 單列、多列數據查詢
  • 標簽和數值的多種過濾條件:>, <, =, <>, like 等
  • 聚合結果的分組(Group by)、排序(Order by)、約束輸出(Limit/Offset)
  • 數值列及聚合結果的四則運算
  • 時間戳對齊的連接查詢(Join Query: 隱式連接)操作
  • 多種聚合/計算函數: count, max, min, avg, sum, twa, stddev, leastsquares, top, bottom, first, last, percentile, apercentile, last_row, spread, diff 等

例如:在命令行工具 taos 中(zhong),我們(men)需(xu)要從表 d1001 中(zhong)查詢出 voltage > 215 的記錄,按時間降序(xu)排列,僅僅輸出如下 2 條結果。

taos> select * from d1001 where voltage > 215 order by ts desc limit 2;
           ts            |       current        |   voltage   |        phase         |
======================================================================================
 2018-10-03 14:38:16.800 |             12.30000 |         221 |              0.31000 |
 2018-10-03 14:38:15.000 |             12.60000 |         218 |              0.33000 |
Query OK, 2 row(s) in set (0.001100s)

為滿(man)足物聯網場(chang)(chang)景的(de)需求,TDengine 還(huan)支(zhi)持幾個特殊的(de)函數(shu)(shu),比如 twa(時(shi)間加權平均)、spread (最(zui)大值(zhi)與最(zui)小值(zhi)的(de)差(cha))、last_row(最(zui)后一條(tiao)記錄)等,未(wei)來還(huan)將有更多與物聯網場(chang)(chang)景相關的(de)函數(shu)(shu)添加進來。

多表聚合查詢

在物聯網(wang)場景中,往往同一個類型(xing)的數據(ju)采(cai)(cai)集(ji)點(dian)有(you)多個。TDengine 采(cai)(cai)用(yong)超級表(biao)(STable)的概念來(lai)描述(shu)某一個類型(xing)的數據(ju)采(cai)(cai)集(ji)點(dian),一張普通的表(biao)來(lai)描述(shu)一個具體(ti)的數據(ju)采(cai)(cai)集(ji)點(dian)。同時 TDengine 使用(yong)標簽來(lai)描述(shu)數據(ju)采(cai)(cai)集(ji)點(dian)的靜(jing)態(tai)屬(shu)性,一個具體(ti)的數據(ju)采(cai)(cai)集(ji)點(dian)有(you)具體(ti)的標簽值。

通過指(zhi)定標簽(qian)的(de)(de)過濾條件,TDengine 實(shi)現了將超級表(biao)(某一(yi)(yi)類型的(de)(de)數(shu)據采集點)所屬的(de)(de)子(zi)表(biao)統(tong)一(yi)(yi)進行(xing)聚合(he)(he)查詢。值得一(yi)(yi)提(ti)的(de)(de)是,對(dui)普通表(biao)的(de)(de)聚合(he)(he)函數(shu)以及(ji)絕大部(bu)分(fen)操作都適用于超級表(biao),語(yu)法(fa)完全一(yi)(yi)樣。

  • 示例一

在 TAOS Shell 查(cha)找加利福尼(ni)亞州所有智能電表采集的電壓平均(jun)值(zhi),并按照 location 分(fen)組。代碼如下所示:

taos> SELECT AVG(voltage) FROM meters GROUP BY location;
       avg(voltage)        |            location            |
=============================================================
             222.000000000 | California.LosAngeles                |
             219.200000000 | California.SanFrancisco               |
Query OK, 2 row(s) in set (0.002136s)
  • 示例二

在 TAOS shell 查找 groupId 為 2 的(de)所(suo)有智(zhi)能電表過(guo)去 24 小時的(de)記錄條數(shu),電流的(de)最大值。代碼如(ru)下所(suo)示:

taos> SELECT count(*), max(current) FROM meters where groupId = 2 and ts > now - 24h;
     cunt(*)  |    max(current)  |
==================================
            5 |             13.4 |
Query OK, 1 row(s) in set (0.002136s)

需要注意的(de)(de)是,TDengine 僅容許對同(tong)屬于(yu)一個超級表(biao)的(de)(de)表(biao)之間進行聚合查詢,不同(tong)超級表(biao)之間的(de)(de)聚合查詢并(bing)不支持。

降采樣查詢、插值

除了(le)上述場(chang)景(jing),在物(wu)聯(lian)網場(chang)景(jing)中,我們還(huan)經(jing)常需要(yao)通過降采(cai)樣(down sampling)將(jiang)采(cai)集的(de)數據按時間(jian)段(duan)進(jin)行聚合(he)。TDengine 提供了(le)一個簡便的(de)關鍵詞——interval(等間(jian)隔窗口),讓按照時間(jian)窗口進(jin)行的(de)查詢操作變得(de)極為簡單。比如(ru),對(dui)智能電表 d1001 采(cai)集的(de)電流(liu)值(zhi)按每 10 秒鐘求和:

taos> SELECT sum(current) FROM d1001 INTERVAL(10s);
           ts            |       sum(current)        |
======================================================
 2018-10-03 14:38:00.000 |              10.300000191 |
 2018-10-03 14:38:10.000 |              24.900000572 |
Query OK, 2 row(s) in set (0.000883s)

同樣,降采樣操作也適(shi)用于超級表(biao),比(bi)如(ru)將(jiang)加利(li)福(fu)尼亞州所有智能電(dian)表(biao)采集的電(dian)流值按每秒鐘求(qiu)和:

taos> SELECT SUM(current) FROM meters where location like "California%" INTERVAL(1s);
           ts            |       sum(current)        |
======================================================
 2018-10-03 14:38:04.000 |              10.199999809 |
 2018-10-03 14:38:05.000 |              32.900000572 |
 2018-10-03 14:38:06.000 |              11.500000000 |
 2018-10-03 14:38:15.000 |              12.600000381 |
 2018-10-03 14:38:16.000 |              36.000000000 |
Query OK, 5 row(s) in set (0.001538s)

此外,降采樣操作也支持(chi)時間偏移,比如:將所有智能電表采集(ji)的電流值按每(mei)秒(miao)鐘求和,但要求每(mei)個時間窗口從(cong) 500 毫(hao)秒(miao)開始(shi):

taos> SELECT SUM(current) FROM meters INTERVAL(1s, 500a);
           ts            |       sum(current)        |
======================================================
 2018-10-03 14:38:04.500 |              11.189999809 |
 2018-10-03 14:38:05.500 |              31.900000572 |
 2018-10-03 14:38:06.500 |              11.600000000 |
 2018-10-03 14:38:15.500 |              12.300000381 |
 2018-10-03 14:38:16.500 |              35.000000000 |
Query OK, 5 row(s) in set (0.001521s)

眾所周知,在物聯網場景里每(mei)個數據(ju)(ju)采(cai)集點采(cai)集數據(ju)(ju)的時間(jian)(jian)(jian)較難同步,但很多分(fen)析(xi)算法(比(bi)如(ru) FFT)需要把(ba)采(cai)集的數據(ju)(ju)嚴格按(an)照(zhao)時間(jian)(jian)(jian)等間(jian)(jian)(jian)隔地對齊,在很多系(xi)統(tong)里,這需要應用自己寫程序來(lai)處理,但使用 TDengine 的降采(cai)樣(yang)操(cao)作這個需求便能輕松解決(jue)了。

如果(guo)一個時間間隔里(li)沒有采集(ji)的數據,TDengine 還提(ti)供插值計(ji)算(suan)的功能。

寫在最后

時(shi)序(xu)數據的(de)查(cha)詢(xun)場(chang)景(jing)多(duo)種多(duo)樣,從用戶需求出發,TDengine 進行(xing)了(le)一系(xi)列查(cha)詢(xun)功能的(de)設計(ji)和優化。本文(wen)詳細介紹了(le) TDengine 中的(de)幾種復(fu)雜查(cha)詢(xun)功能,如果大家在實(shi)操中遇到問題(ti),可以將本文(wen)當做執(zhi)行(xing)手冊進行(xing)查(cha)閱(yue),對于還無法解決(jue)的(de)問題(ti),還可以加小 T 微信,進入(ru) TDengine 技術社區深入(ru)交流。