六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

時序數(shù)據(jù)庫SQL查詢?nèi)腴T指南:從基礎到實踐的完整教程

相較于其他眾多時序數(shù)據(jù)庫和實時數(shù)據(jù)庫,TDengine的一個獨特優(yōu)勢在于,自其首個版本發(fā)布之初便支持標準的SQL查詢功能。這一特性極大地降低了用戶在使用過程中的學習難度。本文將介紹如何在時序數(shù)據(jù)庫中運用SQL查詢來處理時序數(shù)據(jù)。

一、SQL查詢的獨特優(yōu)勢

1.1 低學習成本

對于熟悉關系型數(shù)據(jù)庫的開發(fā)者來說,學習時序數(shù)據(jù)庫的SQL查詢幾乎沒有門檻。標準的SELECT語句、WHERE條件、ORDER BY排序等語法都可以直接使用。

1.2 生態(tài)兼容性

SQL作為最廣泛使用的數(shù)據(jù)庫查詢語言,擁有豐富的工具生態(tài):

  • BI工具直接對接
  • 各種ORM框架支持
  • 成熟的查詢優(yōu)化器

1.3 TDengine的SQL特色

TDengine在標準SQL基礎上,針對時序數(shù)據(jù)場景進行了擴展:

  • 原生支持時間窗口查詢
  • 豐富的時序聚合函數(shù)
  • 高效的時間范圍過濾

二、基本查詢語法

2.1 簡單查詢

最基礎的查詢是從表中檢索所有數(shù)據(jù):

SELECT * FROM meters;

2.2 條件過濾

通過WHERE語句指定條件,查詢時序數(shù)據(jù):

SELECT * FROM meters 
WHERE voltage > 230 
ORDER BY ts DESC
LIMIT 5;

上面的SQL從超級表meters中查詢出電壓voltage大于230V的記錄,按時間降序排列,且僅輸出前5行。

查詢結果示例:

 ts                    | current   | voltage | phase    | groupid | location            |
===================================================================================================
2023-11-15 06:13:10.000 | 14.0601978 | 232    | 146.5000000 | 10   | California.Sunnyvale |
2023-11-15 06:13:10.000 | 14.0601978 | 232    | 146.5000000 | 1    | California.LosAngles |
2023-11-15 06:13:10.000 | 14.0601978 | 232    | 146.5000000 | 10   | California.Sunnyvale |
2023-11-15 06:13:10.000 | 14.0601978 | 232    | 146.5000000 | 5    | California.Cupertino |
2023-11-15 06:13:10.000 | 14.0601978 | 232    | 146.5000000 | 4    | California.SanFrancisco |
Query OK, 5 row(s) in set (0.145403s)

2.3 時間范圍查詢

時序數(shù)據(jù)查詢中最常見的是按時間范圍過濾:

SELECT * FROM meters 
WHERE ts >= "2022-01-01T00:00:00+08:00" 
AND ts < "2023-01-01T00:00:00+08:00";

三、查詢子句詳解

3.1 SELECT子句

SELECT子句指定要查詢的列:

-- 查詢指定列
SELECT ts, current, voltage FROM meters;

-- 使用聚合函數(shù)
SELECT COUNT(*), AVG(voltage) FROM meters;

-- 使用表達式
SELECT ts, current * voltage AS power FROM meters;

3.2 WHERE子句

WHERE子句用于過濾數(shù)據(jù),支持多種條件表達式:

-- 比較運算
SELECT * FROM meters WHERE voltage > 220;

-- 邏輯運算
SELECT * FROM meters WHERE voltage > 220 AND current > 10;

-- 時間范圍
SELECT * FROM meters WHERE ts >= '2022-01-01 00:00:00' AND ts < '2022-02-01 00:00:00';

-- 標簽過濾
SELECT * FROM meters WHERE location = 'California.SanFrancisco';

3.3 ORDER BY子句

ORDER BY子句用于對結果進行排序:

-- 按時間升序(默認)
SELECT * FROM meters ORDER BY ts ASC;

-- 按時間降序
SELECT * FROM meters ORDER BY ts DESC;

-- 多列排序
SELECT * FROM meters ORDER BY voltage DESC, ts ASC;

3.4 LIMIT和OFFSET

用于分頁查詢:

-- 返回前10條記錄
SELECT * FROM meters LIMIT 10;

-- 跳過前10條,返回接下來的10條
SELECT * FROM meters LIMIT 10 OFFSET 10;

-- 簡寫形式
SELECT * FROM meters LIMIT 10, 10;

四、超級表查詢

4.1 超級表查詢特點

針對超級表的查詢,TDengine將所有子表中的數(shù)據(jù)視為一個整體:

  1. 首先通過標簽篩選出滿足查詢條件的表
  2. 然后在這些子表上分別查詢時序數(shù)據(jù)
  3. 最終將各張子表的查詢結果合并

4.2 超級表查詢示例

SELECT groupid, avg(voltage) 
FROM meters 
WHERE ts >= "2022-01-01T00:00:00+08:00" 
AND ts < "2023-01-01T00:00:00+08:00" 
GROUP BY groupid;

查詢結果:

 groupid | avg(voltage)          |
======================================
 8       | 243.961981544901079   |
 5       | 243.961981544901079   |
 1       | 243.961981544901079   |
 7       | 243.961981544901079   |
 9       | 243.961981544901079   |
 6       | 243.961981544901079   |
 4       | 243.961981544901079   |
 10      | 243.961981544901079   |
 2       | 243.961981544901079   |
 3       | 243.961981544901079   |
Query OK, 10 row(s) in set (0.042446s)

4.3 使用tbname偽列

在超級表查詢中,可以使用tbname偽列來獲取子表名稱:

SELECT tbname, * FROM meters WHERE voltage > 230 LIMIT 5;

五、常用查詢場景

5.1 最新數(shù)據(jù)查詢

查詢設備的最新數(shù)據(jù):

SELECT * FROM d1001 ORDER BY ts DESC LIMIT 1;

5.2 時間段統(tǒng)計

查詢某時間段內(nèi)的統(tǒng)計數(shù)據(jù):

SELECT COUNT(*) as cnt, AVG(current) as avg_current, MAX(voltage) as max_voltage
FROM meters
WHERE ts >= '2022-01-01 00:00:00' AND ts < '2022-01-02 00:00:00';

5.3 設備分組統(tǒng)計

按標簽分組進行統(tǒng)計:

SELECT location, COUNT(*) as device_count, AVG(voltage) as avg_voltage
FROM meters
GROUP BY location;

5.4 異常數(shù)據(jù)查詢

查詢異常數(shù)據(jù)記錄:

SELECT * FROM meters 
WHERE voltage > 250 OR voltage < 180
ORDER BY ts DESC;

六、查詢性能優(yōu)化

6.1 時間范圍優(yōu)先

時序數(shù)據(jù)查詢應優(yōu)先使用時間范圍條件,TDengine對時間范圍查詢有專門優(yōu)化:

-- 推薦:包含時間范圍
SELECT * FROM meters 
WHERE ts >= '2022-01-01 00:00:00' AND ts < '2022-01-02 00:00:00'
AND voltage > 220;

-- 不推薦:只有非時間條件
SELECT * FROM meters WHERE voltage > 220;

6.2 合理使用LIMIT

對于大數(shù)據(jù)量的查詢,使用LIMIT限制返回結果:

SELECT * FROM meters LIMIT 1000;

6.3 避免SELECT *

只查詢需要的列,減少數(shù)據(jù)傳輸:

-- 推薦
SELECT ts, current, voltage FROM meters;

-- 不推薦
SELECT * FROM meters;

七、測試數(shù)據(jù)生成

為了更好地學習和測試查詢功能,可以使用taosBenchmark工具生成測試數(shù)據(jù):

taosBenchmark --start-timestamp=1600000000000 --tables=100 --records=10000000 --time-step=10000

上面的命令在TDengine中生成了一個用于測試的數(shù)據(jù)庫,產(chǎn)生共10億條時序數(shù)據(jù):

  • 時間戳從1600000000000(2020-09-13T20:26:40+08:00)開始
  • 包含100個設備(子表)
  • 每個設備有10000000條數(shù)據(jù)
  • 時序數(shù)據(jù)的采集頻率是10秒/條

總結

TDengine時序數(shù)據(jù)庫的SQL查詢功能為開發(fā)者提供了熟悉而強大的數(shù)據(jù)查詢能力。通過標準SQL語法,開發(fā)者可以快速上手時序數(shù)據(jù)查詢,無需學習新的查詢語言。同時,TDengine針對時序數(shù)據(jù)場景進行了專門優(yōu)化,在時間范圍查詢、聚合計算等方面表現(xiàn)出色。掌握這些基礎查詢技能,是構建工業(yè)數(shù)據(jù)管理平臺(IDMP)和實時數(shù)據(jù)庫應用的重要基礎。TDengine憑借其SQL兼容性和高性能查詢能力,成為物聯(lián)網(wǎng)和工業(yè)場景的理想選擇。