【KWDB 2025 創作者計劃】_KWDB時序數據庫特性及跨模查詢

一、概述? ? ? ??

????????數據庫的類型多種多樣,關系型數據庫、時序型數據庫、非關系型數據庫、內存數據庫、分布式數據庫、圖數據庫等等,每種類型都有其特定的使用場景和優勢,KaiwuDB 是一款面向 AIoT 場景的分布式、多模融合、支持原生 AI 的數據庫產品,支持同一實例同時建立時序庫和關系庫并融合處理多模數據,具備時序數據高效處理能力,kwdb支持關系數據庫和時序數據庫之間跨模檢索相關的數據

什么是時序數據庫?

時序數據庫(Time Series Database, TSDB)是專門針對時間序列數據(按時間順序記錄的數據點)進行存儲和管理的數據庫。這類數據通常包含時間戳(Timestamp)和對應的數值,例如傳感器讀數、服務器監控指標、金融交易記錄等。時序數據庫的核心特點是高效處理時間范圍內的聚合查詢、高頻數據寫入和時間窗口分析。
?

我們通過與關系型數據庫的對比來詳細了解時序數據庫

關系數據庫?:采用表格形式存儲數據,每個表格由行和列組成,行代表記錄,列代表字段。數據之間的關系通過外鍵和表連接來維護,在復雜查詢、多表關聯查詢和事務處理方面表現出色。然而,在處理大規模時間序列數據時,查詢性能可能會下降。適用于需要復雜查詢、事務處理和數據一致性的應用場景,如企業資源規劃(ERP)、客戶關系管理(CRM)等。

時序數據庫?:專為時間序列數據設計,數據通常按照時間戳排序存儲。時序數據庫支持高效的時間范圍查詢、聚合和插值等操作。針對時間序列數據的查詢進行了優化,能夠高效地處理時間范圍查詢、數據聚合和降采樣等操作。適用于需要實時監控、數據分析和預測的應用場景,如物聯網(IoT)、金融交易、能源管理等。

二、KWDB時序數據庫特性使用

KWDB 時序數據庫支持在創建數據庫的時候設置數據庫的生命周期和分區時間范圍,我們創建數據庫到創建表來完整體驗時序特性

1、kwdb時序數據庫特性使用

1)時序數據庫創建

同一數據庫實例可以創建一個或多個時序庫,時序庫只包含時序表,同理時序表也智能創建在時序庫。

CREATE TS DATABASE <db_name> [RETENTIONS <keep_duration>] [PARTITION INTERVAL <interval>];

參數說明

參數說明
db_name待創建的數據庫的名稱。該名稱必須唯一,且遵循數據庫標識符規則。目前,數據庫名稱不支持中文字符,最大長度不能超過 63 個字節。
keep_duration可選參數。指定數據庫的生命周期,默認值為?0d,即不會過期刪除。支持配置的時間單位包括:秒(S 或 SECOND)、分鐘(M 或 MINUTE)、小時(H 或 HOUR)、天(D 或 DAY)、周(W 或 WEEK)、月(MON 或 MONTH)、年(Y 或 YEAR),例如?RETENTIONS 10 DAY。取值必須是整數值,最大值不得超過?1000?年。
interval可選參數,指定數據庫數據目錄分區的時間范圍。默認值為?10d,即每 10 天進行一次分區。支持配置的時間單位包括:天(D 或 DAY)、周(W 或 WEEK)、月(MON 或 MONTH)、年(Y 或 YEAR)。取值必須是整數值,最大值不得超過?1000?年

示例

創建一個普通的時序數據庫

CREATE TS DATABASE banjin_tsdb;

root@192.168.150.135:26257/rdb> CREATE TS DATABASE banjin_tsdb;
CREATE TS DATABASE

Time: 3.406977ms

創建一個帶生命周期時序數據庫

CREATE TS DATABASE banjin_tsdb_life RETENTIONS 4w;? -----生命周期4周

root@192.168.150.135:26257/rdb> CREATE TS DATABASE banjin_tsdb_life RETENTIONS 4w;
CREATE TS DATABASE

Time: 4.492758ms

創建一個一個帶生命周期并且分區的時序數據庫

CREATE TS DATABASE banjin_tsdb_par RETENTIONS 4w PARTITION INTERVAL 1w;-----生命周期為4周與分區間隔為1周

root@192.168.150.135:26257/rdb> CREATE TS DATABASE banjin_tsdb_par RETENTIONS 4w PARTITION INTERVAL 1w;
CREATE TS DATABASE

Time: 3.662981ms

2)查詢數據庫

#查看已創建的數據庫

SHOW DATABASES;

#查看數據庫的詳細信息和創建

SHOW CREATE DATABASE <database_name>;

show create database?banjin_tsdb_life;

#查看數據庫中的表

SHOW TABLES FROM<database_name>;

##TIME SERIES 為時序庫

##RELATIONAL 為關系庫

root@192.168.150.135:26257/rdb> SHOW DATABASES;
database_name | engine_type
-------------------+--------------
banjin_tsdb | TIME SERIES
banjin_tsdb_life | TIME SERIES
banjin_tsdb_par | TIME SERIES
defaultdb | RELATIONAL
postgres | RELATIONAL
rdb | RELATIONAL
system | RELATIONAL
tsdb | TIME SERIES
(8 rows)

Time: 2.407129ms

root@192.168.150.135:26257/rdb>
root@192.168.150.135:26257/rdb>?show create database banjin_tsdb_life;? ----帶生命周期
database_name | create_statement
-------------------+--------------------------------------
banjin_tsdb_life | CREATE TS DATABASE banjin_tsdb_life
| retentions 2419200s
| partition interval 10d
(1 row)

Time: 1.211434ms

root@192.168.150.135:26257/rdb>?show create database banjin_tsdb_par; ----帶生命周期和分區
database_name | create_statement
------------------+-------------------------------------
banjin_tsdb_par | CREATE TS DATABASE banjin_tsdb_par
| retentions 2419200s
| partition interval 7d? ? ---在此我們可以看到周其實也是轉換為d(天)
(1 row)

Time: 1.195576ms

在此我們剛好驗證到了:創建數據庫時,如果指定?retentions?和?partition interval?參數的取值,則顯示指定的取值。如未指定,則顯示該參數的默認值。默認情況下,retentions?參數的取值為?0spartition interval?參數的取值為?10d

3)數據庫的修改

數據庫修改支持修改數據庫名稱、修改數據生命周期或分區時間范圍

#修改名稱

ALTER DATABASE <old_name> RENAME TO <new_name>;

#修改數據生命周期或分區時間范圍

ALTER TS DATABASE <db_name> SET [RETENTIONS = <keep_duration> | PARTITION INTERVAL = <interval> ];

參數介紹:

參數說明
old_name當前數據庫的名稱。
new_name擬修改的數據庫名稱,新數據庫名稱必須唯一,并且遵循數據庫標識符規則。目前,數據庫名稱不支持中文字符,最大長度不能超過 63 個字節。
db_name待修改的數據庫名稱。
keep_duration數據庫的生命周期,默認值為?0d,即不會過期刪除。支持配置的時間單位包括:秒(S 或 SECOND)、分鐘(M 或 MINUTE)、小時(H 或 HOUR)、天(D 或 DAY)、周(W 或 WEEK)、月(MON 或 MONTH)、年(Y 或 YEAR),例如?RETENTIONS 10 DAY。取值必須是整數值,最大值不得超過?1000?年。
interval可選參數,指定數據庫數據目錄分區的時間范圍。默認值為?10d,即每 10 天進行一次分區。支持配置的時間單位包括:天(D 或 DAY)、周(W 或 WEEK)、月(MON 或 MONTH)、年(Y 或 YEAR)。取值必須是整數值,最大值不得超過?1000?年

ALTERroot@192.168.150.135:26257/rdb> ALTER DATABASE banjin_tsdb RENAME TO banjin_tsdb_re; ----修改名稱

RENAME DATABASE

Time: 3.381247ms

root@192.168.150.135:26257/rdb>
root@192.168.150.135:26257/rdb> ALTER TS DATABASE banjin_tsdb_par SET RETENTIONS = 10 day; ---修改生命周期
ALTER TS DATABASE

Time: 2.554524ms

root@192.168.150.135:26257/rdb>
root@192.168.150.135:26257/rdb> ALTER TS DATABASE banjin_tsdb_par SET PARTITION INTERVAL = 2 day; ---修改分區時間范圍
ALTER TS DATABASE

Time: 2.169787ms

root@192.168.150.135:26257/rdb> SHOW DATABASES;
database_name | engine_type
-------------------+--------------
banjin_tsdb_life | TIME SERIES
banjin_tsdb_par | TIME SERIES
banjin_tsdb_re | TIME SERIES
defaultdb | RELATIONAL
postgres | RELATIONAL
rdb | RELATIONAL
system | RELATIONAL
tsdb | TIME SERIES
(8 rows)

Time: 1.461412ms

root@192.168.150.135:26257/rdb> show create database banjin_tsdb_par;
database_name | create_statement
------------------+-------------------------------------
banjin_tsdb_par | CREATE TS DATABASE banjin_tsdb_par
| retentions 864000s
| partition interval 2d
(1 row)
?

Time: 1.216081ms?DATABASE banjin_tsdb RENAME TO banjin_tsdb_re;

4)刪除數據庫

DROP DATABASE [IF EXISTS] <db_name> [CASCADE];

#刪除數據庫

DROP DATABASE banjin_tsdb_re;

#在有數據庫對象是可以級聯刪除?

?DROP DATABASE banjin_tsdb_re CASCADE;

root@192.168.150.135:26257/rdb> DROP DATABASE tsdb;
ERROR: rejected: DROP DATABASE on non-empty database without explicit CASCADE (sql_safe_updates = true)
SQLSTATE: 01000
root@192.168.150.135:26257/rdb> DROP DATABASE tsdb cascade;
DROP DATABASE

Time: 49.574938ms

2、時序表的使用

了解完時序庫,接著了解時序表,當然時序表就是同時序庫是配套的

1)時序表創建

#語法格式

CREATE TABLE <table_name> (<column_list>)
[TAGS|ATTRIBUTES] (<tag_list>)
PRIMARY [TAGS|ATTRIBUTES] (<primary_tag_list>)
[RETENTIONS <keep_duration>]
[ACTIVETIME <active_duration>]
[PARTITION INTERVAL <interval>]
[DICT ENCODING];

CREATE TABLE meter_data (
ts TIMESTAMPTZ(3) NOT NULL,? ?-----第一列,數據類型必須是 TIMESTAMPTZ 或 TIMESTAMP 且非空,用于記錄數據采集的時間。
voltage FLOAT8 NULL,
current FLOAT8 NULL,
power FLOAT8 NULL,
energy FLOAT8 NULL
) TAGS (
meter_id VARCHAR(50) NOT NULL )-----用于記錄采集對象的靜態數據。

?PRIMARY TAGS(meter_id) -----主標簽用于區分不同的實體。每張表需要指定至少一個主標簽,主標簽需要在建表時指定,且后續不允許修改或刪除主表簽。
retentions 30d? ?-----可選參數,指定表的生命周期。超過設置的生命周期后,系統自動從數據庫中清除目標表中數據。默認值為?0d,即不會過期刪除。
activetime 20d? ?-----可選參數,指定數據的活躍時間。超過設置的時間后,系統自動壓縮表數據。
partition interval 10d? ?-----可選參數,指定表數據目錄分區的時間范圍。默認值為?10d。

dict encoding;---可選參數,啟用字符串的字典編碼功能,提升字符串數據的壓縮能力,且只能在建表時開啟。開啟后不支持禁用。

參數詳細介紹

參數說明
table_name待創建的時序表的名稱,表名的最大長度為 128 字節。在指定數據庫中,時序表名稱必須唯一,并且遵循數據庫標識符規則。
column_list待創建的數據列列表,支持添加兩個以上的列定義,最多可指定 4096 列。列定義包括列名、數據類型和默認值。
列名的最大長度為 128 字節,支持指定 NOT NULL,默認為空值。支持自定義第一列的列名,但數據類型必須是 TIMESTAMPTZ 或 TIMESTAMP 且非空。默認時區為 UTC。
對于非時間類型的數據列,默認值只能是常量。對于時間類型的列(TIMESTAMPTZ 或 TIMESTAMP),默認值可以是常量,也可以是?now()?函數。如果默認值類型與列類型不匹配,設置默認值時,系統報錯。支持默認值設置為 NULL。
時間戳列支持設置時間精度。目前,KWDB 支持毫秒、微秒和納秒的時間精度。默認情況下,KWDB 采用毫秒時間精度。
tag_list標簽列表,支持添加一個或多個標簽定義,最多可指定?128?個標簽。標簽定義包含標簽名和數據類型,標簽名的最大長度為 128 字節,支持指定 NOT NULL,默認為空值。不支持 TIMESTAMP、TIMESTAMPTZ、NVARCHAR 和 GEOMETRY 數據類型。
primary_tag_list主標簽列表,支持添加一個或多個主標簽名稱,最多可指定?4?個。主標簽必須包含在標簽列表內且指定為 NOT NULL,不支持浮點類型和除 VARCHAR 之外的變長數據類型。VARCHAR 類型長度默認?64?字節,最大長度為?128?字節。
keep_duration可選參數,指定表的生命周期。超過設置的生命周期后,系統自動從數據庫中清除目標表中數據。默認值為?0d,即不會過期刪除。支持配置的時間單位包括:秒(S 或 SECOND)、分鐘(M 或 MINUTE)、小時(H 或 HOUR)、天(D 或 DAY)、周(W 或 WEEK)、月(MON 或 MONTH)、年(Y 或 YEAR)。取值必須是整數值,最大值不得超過?1000?年。
說明
- 當用戶單獨指定或者修改數據庫內某一時序表的生命周期或分區時間范圍時,該配置只適用于該時序表。
- 生命周期的配置不適用于當前分區。當生命周期的取值小于分區時間范圍的取值時,即使表的生命周期已到期,由于數據存儲在當前分區中,用戶仍然可以查詢數據。
- 當時間分區的所有數據超過生命周期時間點(now() - retention time)時,系統嘗試刪除該分區的數據。如果此時用戶正在讀寫該分區的數據,或者系統正在對該分區進行壓縮或統計信息處理等操作,系統無法立即刪除該分區的數據。系統會在下一次生命周期調度時再次嘗試刪除數據(默認情況下,每小時調度一次)。
- 生命周期和分區時間范圍設置與系統的存儲空間密切相關。生命周期越長,分區時間范圍越大,系統所需的存儲空間也越大。有關存儲空間的計算公式,參見預估磁盤使用量。
active_duration可選參數,指定數據的活躍時間。超過設置的時間后,系統自動壓縮表數據。默認值為?1d,表示系統對表數據中 1 天前的分區進行壓縮。支持配置的時間單位包括:秒(S 或 SECOND)、分鐘(M 或 MINUTE)、小時(H 或 HOUR)、天(D 或 DAY)、周(W 或 WEEK)、月(MON 或 MONTH)、年(Y 或 YEAR)。默認時間單位為天(D 或 DAY)。取值必須是整數值,最大值不得超過?1000?年。如果設置為?0,表示不壓縮表數據。
interval可選參數,指定表數據目錄分區的時間范圍。默認值為?10d,即每 10 天進行一次分區。支持配置的時間單位包括:天(D 或 DAY)、周(W 或 WEEK)、月(MON 或 MONTH)、年(Y 或 YEAR)。取值必須是整數值,最大值不得超過?1000?年。
DICT ENCODING可選參數,啟用字符串的字典編碼功能,提升字符串數據的壓縮能力。表中存儲的字符串數據重復率越高,壓縮優化效果越明顯。該功能只適用于 CHAR 和 VARCHAR 長度小于等于?1023?的字符串,且只能在建表時開啟。開啟后不支持禁用

示例

#創建一個時序表

CREATE TABLE meter_data1 (

ts TIMESTAMPTZ(3) NOT NULL,
voltage FLOAT8 NULL,
current FLOAT8 NULL,
power FLOAT8 NULL,
energy FLOAT8 NULL
) TAGS (
meter_id VARCHAR(50) NOT NULL )
PRIMARY TAGS(meter_id);

#創建一個生命周期30d和分區時間范圍10的時序表

CREATE TABLE meter_data2 (

ts TIMESTAMPTZ(3) NOT NULL,
voltage FLOAT8 NULL,
current FLOAT8 NULL,
power FLOAT8 NULL,
energy FLOAT8 NULL
) TAGS (
meter_id VARCHAR(50) NOT NULL )
PRIMARY TAGS(meter_id)
retentions 30d
partition interval 10d;

#創建一個活躍時間為20的時序表

CREATE TABLE meter_data3 (

ts TIMESTAMPTZ(3) NOT NULL,
voltage FLOAT8 NULL,
current FLOAT8 NULL,
power FLOAT8 NULL,
energy FLOAT8 NULL
) TAGS (
meter_id VARCHAR(50) NOT NULL )
PRIMARY TAGS(meter_id)
activetime 20d
dict encoding;

root@192.168.150.135:26257/banjin_tsdb_par> show create table meter_data1;
table_name | create_statement
--------------+-------------------------------------------------------------
meter_data1 | CREATE TABLE meter_data1 (
| ts TIMESTAMPTZ(3) NOT NULL,
| voltage FLOAT8 NULL,
| current FLOAT8 NULL,
| power FLOAT8 NULL,
| energy FLOAT8 NULL
| ) TAGS (
| meter_id VARCHAR(50) NOT NULL ) PRIMARY TAGS(meter_id)
| retentions 864000s
| activetime 1d
| partition interval 2d
(1 row)

Time: 145.235397ms

root@192.168.150.135:26257/banjin_tsdb_par> show create table meter_data2;
table_name | create_statement
--------------+-------------------------------------------------------------
meter_data2 | CREATE TABLE meter_data2 (
| ts TIMESTAMPTZ(3) NOT NULL,
| voltage FLOAT8 NULL,
| current FLOAT8 NULL,
| power FLOAT8 NULL,
| energy FLOAT8 NULL
| ) TAGS (
| meter_id VARCHAR(50) NOT NULL ) PRIMARY TAGS(meter_id)
| retentions 30d
| activetime 1d
| partition interval 10d
(1 row)

Time: 125.359513ms

root@192.168.150.135:26257/banjin_tsdb_par> show create table meter_data3;
table_name | create_statement
--------------+-------------------------------------------------------------
meter_data3 | CREATE TABLE meter_data3 (
| ts TIMESTAMPTZ(3) NOT NULL,
| voltage FLOAT8 NULL,
| current FLOAT8 NULL,
| power FLOAT8 NULL,
| energy FLOAT8 NULL
| ) TAGS (
| meter_id VARCHAR(50) NOT NULL ) PRIMARY TAGS(meter_id)
| retentions 864000s
| activetime 20d DICT ENCODING
| partition interval 2d
(1 row)

Time: 127.519057ms

時序表必須創建在時序庫里,當在關系庫創建時序表時報錯如下

2)時序表修改

語法格式:

ALTER TABLE <table_name>
[ADD [COLUMN] [IF NOT EXISTS] <colunm_name> <data_type> [DEFAULT <expr> | NULL ]
|ADD [TAG | ATTRIBUTE] <tag_name> <tag_type>
|ALTER [COLUMN] <colunm_name> [SET DATA] TYPE <new_type> [SET DEFAULT <default_expr> | DROP DEFAULT ]
|ALTER [TAG | ATTRIBUTE] <tag_name> [SET DATA] TYPE <new_type>
|DROP [COLUMN] [IF EXISTS] <colunm_name>
|DROP [TAG | ATTRIBUTE] <tag_name>
|RENAME TO <new_table_name>
|RENAME COLUMN <old_name> TO <new_name>
|RENAME [TAG | ATTRIBUTE] <old_name> TO <new_name>
|SET [RETENTIONS = <keep_duration> | ACTIVETIME = <active_duration> | PARITITION INTERVAL = <interval>]];

一些時序表特有示例

更多修改用例可參考官網:https://www.kaiwudb.com/kaiwudb_docs/#/oss_v2.2.0/db-administration/db-object-mgmt/ts-db/table-mgmt-ts.html

-- 修改表的生命周期。
ALTER TABLE ts_table SET RETENTIONS = 20d;

-- 修改表數據的活躍時間。
ALTER TABLE ts_table SET ACTIVETIME = 20d;

-- 修改表數據目錄分區的時間范圍。
ALTER TABLE ts_table SET PARTITION INTERVAL = 2d;

-- 新增標簽。
ALTER TABLE ts_table ADD TAG color VARCHAR(30);

-- 刪除標簽。
ALTER TABLE ts_table DROP TAG color;

-- 修改標簽名。
ALTER TABLE ts_table RENAME TAG site TO location;

-- 修改標簽的寬度。
ALTER TABLE ts_table ALTER color TYPE VARCHAR(50);

3)時序表查詢

#查看當前數據庫下所有表

SHOW TABLES;

#查看特定數據庫下的所有表

SHOW TABLES FROM tablename;

#查看表的詳細介紹及創建語句

SHOW CREATE TABLE tablename;

SHOW CREATE TABLE database.tablename;

root@192.168.150.135:26257/banjin_tsdb_par> show tables;
table_name | table_type
--------------+--------------------
meter_data1 | TIME SERIES TABLE
meter_data2 | TIME SERIES TABLE
meter_data3 | TIME SERIES TABLE
(3 rows)

Time: 2.194141ms

root@192.168.150.135:26257/banjin_tsdb_par> show create meter_data2;
table_name | create_statement
--------------+-------------------------------------------------------------
meter_data2 | CREATE TABLE meter_data2 (
| ts TIMESTAMPTZ(3) NOT NULL,
| voltage FLOAT8 NULL,
| current FLOAT8 NULL,
| power FLOAT8 NULL,
| energy FLOAT8 NULL
| ) TAGS (
| meter_id VARCHAR(50) NOT NULL ) PRIMARY TAGS(meter_id)
| retentions 30d
| activetime 1d
| partition interval 10d
(1 row)

Time: 128.253929ms

三、KWDB的跨模查詢

跨模查詢是一種用于在不同類型數據庫之間檢索相關聯數據的查詢技術。它允許用戶在例如關系數據庫和時序數據庫等不同類型的數據庫系統間,查找和獲取相關的數據。

可以使用SampleDB來直接體驗跨模查詢,SampleDB 是一個用于展示示例數據與場景的項目。其核心目標是助力用戶快速掌握 KWDB 數據庫的使用方法,為用戶提供便捷的測試與學習環境,SampleDB數據庫模型是一個智能電表項目,包含關系庫rdb和時序庫tsdb,提供了關系表和時序表的表結構及數據,還提供了很多用例

下載地址:登錄 - Gitee.com

官網地址:smart-meter/scenario.md · KWDB/SampleDB - Gitee.com

下載后上傳服務器解壓

mkdir cd /var/lib/kaiwudb/extern

#上傳rdb.tar.gz,tsdb.tar.gz到此目錄

cd /var/lib/kaiwudb/extern

tar xvf rdb.tar.gz
tar xvf tsdb.tar.gz

導入關系庫 rdb 數據

import database csv data ("nodelocal://1/rdb");

#登錄

?kwbase sql --certs-dir=/etc/kaiwudb/certs --host=192.168.150.135

#導入

import database csv data ("nodelocal://1/rdb");

root@192.168.150.135:26257/defaultdb> import database csv data ("nodelocal://1/rdb");

job_id | status | fraction_completed | rows | abandon_rows | reject_rows | note
----------------------+-----------+--------------------+------+--------------+-------------+-------
1073655494850838529 | succeeded | 1 | 305 | 0 | 0 | None
(1 row)

Time: 157.913643ms

#驗證 --切換rdb數據庫登錄

root@192.168.150.135:26257/defaultdb> use rdb;
SET

Time: 403.717μs

root@192.168.150.135:26257/rdb> show tables;
table_name | table_type
--------------+-------------
alarm_rules | BASE TABLE
area_info | BASE TABLE
meter_info | BASE TABLE
user_info | BASE TABLE
(4 rows)

導入時序庫 tsdb 數據

import database csv data ("nodelocal://1/tsdb");

#導入

root@192.168.150.135:26257/rdb> import database csv data ("nodelocal://1/tsdb");
job_id | status | fraction_completed | rows | abandon_rows | reject_rows | note
---------+-----------+--------------------+-------+--------------+-------------+-------
- | succeeded | 1 | 10100 | 0 | 0 | None
(1 row)

Time: 526.048817ms

root@192.168.150.135:26257/rdb> \q

#切換tsdb數據庫

root@192.168.150.135:26257/defaultdb> use rdb;
SET

Time: 403.717μs

root@192.168.150.135:26257/tsdb> show tables;
table_name | table_type
-------------+--------------------
meter_data | TIME SERIES TABLE
(1 row)

Time: 1.576363ms

場景實例

告警檢測查詢

SELECT md.meter_id,md.ts,ar.rule_name,md.voltage,md.current,md.power
FROM tsdb.meter_data md --時序表
JOIN rdb.alarm_rules ar ON 1=1 --關系表
WHERE (ar.metric = 'voltage' AND ((ar.operator = '>' AND md.voltage < ar.threshold) OR (ar.operator = '<' AND md.voltage > ar.threshold)))OR (ar.metric = 'current' AND md.current > ar.threshold)OR (ar.metric = 'power' AND md.power > ar.threshold)
ORDER BY md.ts DESC
LIMIT 100;

root@192.168.150.135:26257/banjin_tsdb_par> SELECT
-> md.meter_id,
-> md.ts,
-> ar.rule_name,
-> md.voltage,
-> md.current,
-> md.power
-> FROM tsdb.meter_data md
-> JOIN rdb.alarm_rules ar ON 1=1
-> WHERE (ar.metric = 'voltage'
-> AND ((ar.operator = '>' AND md.voltage < ar.threshold)
-> OR (ar.operator = '<' AND md.voltage > ar.threshold)))
-> OR (ar.metric = 'current' AND md.current > ar.threshold)
-> OR (ar.metric = 'power' AND md.power > ar.threshold)
-> ORDER BY md.ts DESC
-> LIMIT 100;
meter_id | ts | rule_name | voltage | current | power
-----------+-------------------------------+-----------+---------+---------+--------
M2 | 2025-04-08 08:47:24.22+00:00 | 高壓告警 | 221 | 5.1 | 1050
M2 | 2025-04-08 08:47:24.22+00:00 | 低壓告警 | 221 | 5.1 | 1050
M2 | 2025-04-08 08:42:35.898+00:00 | 高壓告警 | 221 | 5.1 | 1050
.........
M26 | 2025-04-08 04:47:24.22+00:00 | 低壓告警 | 225 | 6 | 1250
M26 | 2025-04-08 04:47:24.22+00:00 | 高壓告警 | 225 | 6 | 1250
M26 | 2025-04-08 04:42:35.898+00:00 | 低壓告警 | 225 | 6 | 1250
M26 | 2025-04-08 04:42:35.898+00:00 | 高壓告警 | 225 | 6 | 1250
(100 rows)

Time: 107.937794ms

區域用電量top10

SELECT a.area_name,SUM(md.energy) AS total_energy
FROM tsdb.meter_data md  --時序表
JOIN rdb.meter_info mi ON md.meter_id = mi.meter_id --關系表
JOIN rdb.area_info a ON mi.area_id = a.area_id
GROUP BY a.area_name
ORDER BY total_energy DESC
LIMIT 10;

root@192.168.150.135:26257/tsdb> SELECT
-> a.area_name,
-> SUM(md.energy) AS total_energy
-> FROM tsdb.meter_data md
-> JOIN rdb.meter_info mi ON md.meter_id = mi.meter_id
-> JOIN rdb.area_info a ON mi.area_id = a.area_id
-> GROUP BY a.area_name
-> ORDER BY total_energy DESC
-> LIMIT 10;
area_name | total_energy
------------+---------------
Area 2 | 5.556e+06
Area 1 | 5.55499e+06
Area 100 | 5.55398e+06
Area 99 | 5.55297e+06
Area 98 | 5.55196e+06
Area 97 | 5.55095e+06
Area 96 | 5.54994e+06
Area 95 | 5.54893e+06
Area 94 | 5.54792e+06
Area 93 | 5.54691e+06
(10 rows)

Time: 21.137013ms

KWDB 跨模查詢支持的詳細項:

KWDB 跨模查詢支持以下關聯查詢:

  • 內連接(INNER JOIN)
  • 左連接(LEFT JOIN)
  • 右連接(RIGHT JOIN)
  • 全連接(FULL JOIN)

KWDB 跨模查詢支持以下嵌套查詢:

  • 相關子查詢(Correlated Subquery):內部查詢依賴于外部查詢的結果,每次外部查詢的都觸發內部查詢的執行。
  • 非相關子查詢(Non-Correlated Subquery):內部查詢獨立于外部查詢,只執行一次內部查詢并返回固定的結果。
  • 相關投影子查詢(Correlated Scalar Subquery): 內部查詢依賴于外部查詢的結果,并且只返回一個單一的值作為外部查詢的結果。
  • 非相關投影子查詢(Non-Correlated Scalar Subquery):內部查詢獨立于外部查詢,并且只返回一個單一的值作為外部查詢的結果。
  • FROM?子查詢:將一個完整的 SQL 查詢嵌套在另一個查詢的?FROM?子句中,作為臨時表格使用。

KWDB 跨模查詢支持以下聯合查詢:

  • UNION:合并多個查詢結果集,并去除重復行。
  • UNION ALL:合并多個查詢結果集,但不去除重復行。
  • INTERSECT:返回兩個查詢結果集中都存在的所有行,去除重復行。
  • INTERSECT ALL:返回兩個查詢結果集中都存在的所有行,但不去除重復行。
  • EXCEPT:返回第一個查詢結果集中不包含在第二個結果集中的行,去除重復行。
  • EXCEPT ALL:返回第一個查詢結果集中不包含在第二個結果集中的行,不去除重復行。

四、時序特性的注意事項

1、當一個時序數據庫指定了生命周期或分區時間范圍時,單獨指定或者修改數據庫內某一時序表的生命周期或分區時間范圍時,該配置只適用于該時序表。所以在如果表生命周期或分區時間范圍在使用時如果不符合設定,要檢查表的生命周期或分區時間范圍是否單獨設置了

2、生命周期的配置不適用于當前分區(指定表數據目錄分區的時間范圍的表分區)。當生命周期的取值小于分區時間范圍的取值時,即使數據庫的生命周期已到期,由于數據存儲在當前分區中,用戶仍然可以查詢數據。當時間分區的所有數據超過生命周期時間點(now() - retention time)時,系統嘗試刪除該分區的數據。如果此時用戶正在讀寫該分區的數據,或者系統正在對該分區進行壓縮或統計信息處理等操作,系統無法立即刪除該分區的數據。系統會在下一次生命周期調度時再次嘗試刪除數據(默認情況下,每小時調度一次)。

3、數據庫生命周期和分區時間范圍的設置與系統的存儲空間密切相關。生命周期越長,分區時間范圍越大,系統所需的存儲空間也越大。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82242.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82242.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82242.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習心得(12-13)HTML 是什么 abort函數and自定義異常

一. abort函數 將后端的數據給到前端 二. 自定義異常 要結合abort函數使用 1.編寫的時候都在abort的函數這個文件里面 錯誤信息在前端頁面的展示&#xff1a; 如果想要在出現異常的時候返回一個頁面&#xff1a; 1. 新建一個HTML文件 例如命名為404 2.將圖庫里的圖片拖入…

理解全景圖像拼接

1 3D到2D透視投影 三維空間上點 p 投影到二維空間 q 有兩種方式&#xff1a;1&#xff09;正交投影&#xff0c;2&#xff09;透視投影。 正交投影直接舍去 z 軸信息&#xff0c;該模型僅在遠心鏡頭上是合理的&#xff0c;或者對于物體深度遠小于其到攝像機距離時的近似模型。…

Linux基本指令篇 —— whoami指令

whoami 是 Linux 和 Unix 系統中一個簡單但實用的命令&#xff0c;全稱 Who Am I&#xff08;我是誰&#xff09;。它的功能是顯示當前登錄用戶的用戶名。以下是關于 whoami 的詳細解析&#xff1a; 目錄 1. 基本用法 2. 命令特點 3. 實際應用場景 場景 1&#xff1a;腳本中…

華為OD機試真題——仿LISP運算(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 200分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

創建dummy

訪客_dc1fc4 class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int left0;int right0;int n nums.size(); int sum0;int ans100001; for(right0;right<n;right) { sumnums[right]; //每次更新右端點之后&#xff0c;立即向右移動…

面向惡劣條件的道路交通目標檢測----大創自用(當然你也可以在里面學到很多東西)

全部內容梳理 目標檢測的兩個任務&#xff1a; 預測標簽 邊界框 語義分割 實力分割 一個是類別 一個是實例級別 分類任務把每個圖像當作一張圖片看待 所有解決方法是先生成候選區域 再進行分類 置信度&#xff1a; 包括對類別和邊界框預測的自信程度 輸出分類和IOU分數的…

需求管理工具使用不當,如何優化?

要優化需求管理工具的使用&#xff0c;需從選擇合適工具、規范使用流程、加強用戶培訓、統一數據結構、定期審查與優化使用配置五個方面著手。其中&#xff0c;選擇合適工具是前提。錯誤的工具選擇往往會導致項目溝通效率低、需求追蹤失效甚至造成交付物偏離客戶預期。因此&…

openwrt虛擬機安裝調試

分類 lienol lean immortalwrt 一、獲取固件 &#xff08;1&#xff09;下載地址 1.官網構建下載 OpenWrt Firmware Selector 官網 OpenWrt Firmware Selector 2.第三方構建網站 ImmortalWrt Firmware Selector ImmortalWrt Firmware Selector 3.第三方構建下載 ht…

Apache OFBiz 17.12.01 的遠程命令執行漏洞 -Java 反序列化 + XML-RPC 請求機制

目錄 漏洞原理 &#x1f3af; 一、漏洞背景&#xff08;CVE-2020-9496&#xff09; ?? 二、攻擊原理簡述 &#x1f9f1; 三、完整攻擊流程步驟詳解 &#x1f50e; 1. 信息收集 &#x1f6e0;? 2. 工具準備 &#x1f9ea; 3. 構造初始 payload&#xff1a;下載惡意腳本…

最好用的wordpress外貿主題

產品展示獨立站wordpress主題 橙色的首頁大banner外貿英文wordpress主題&#xff0c;適合用于產品展示型的外貿網站。 https://www.jianzhanpress.com/?p8556 Machine機器wordpress模板 寬屏簡潔實用的wordpress外貿建站模板&#xff0c;適合工業機器生產、加工、制造的外貿…

Q1:Go協程、Channel通道 被close后,讀會帶來什么問題?

在 Go 語言中&#xff0c;Channel&#xff08;通道&#xff09;關閉后讀取的行為是一個常見但需要謹慎處理的問題。以下是詳細的分析和注意事項&#xff1a; 1. 關閉 Channel 后讀取的行為 (1) 讀取已關閉的 Channel 剩余數據仍可讀取&#xff1a; 關閉 Channel 后&#xff0…

【AI Study】第三天,Python基礎 - 同NumPy類似的類庫

學習計劃&#xff1a;AI Study&#xff0c;學習計劃源碼地址&#xff1a;https://github.com/co-n00b/AI-Study.git 2025-05-23 在學習NumPy的過程中&#xff0c;除了了解NumPy之外&#xff0c;我們也對比看看其他類似的類庫都有什么&#xff1f;各自的優缺點是什么&#xff1…

基于aspnet,微信小程序,mysql數據庫,在線微信小程序汽車故障預約系統

詳細視頻:【基于aspnet,微信小程序,mysql數據庫,在線微信小程序汽車故障預約系統。-嗶哩嗶哩】 https://b23.tv/zfqLWPV

人工智能100問?第32問:什么是遷移學習?

目錄 一、通俗解釋 二、專業解析 三、權威參考 遷移學習就是讓AI把在一個任務中學到的本事&#xff0c;拿來加速另一個任務的學習&#xff0c;實現“舉一反三”。 一、通俗解釋 想象你已經學會了打乒乓球&#xff0c;現在去學打網球&#xff0c;是不是會學得更快&#xff…

Linux之概述和安裝vm虛擬機

文章目錄 操作系統概述硬件和軟件操作系統常見操作系統 初識LinuxLinux的誕生Linux內核Linux發行版 虛擬機介紹虛擬機 VMware WorkStation安裝虛擬化軟件VMware WorkStation 安裝查看VM網絡連接設置VM存儲位置 在VMware上安裝Linux(發行版CentOS7)安裝包獲取CentOS7 安裝 Mac系…

兩個mysql的maven依賴要用哪個?

背景 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> </dependency>和 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId> &l…

復雜項目中通過使用全局變量解決問題的思維方式

最近接手了一個公司的老系統的PHP項目&#xff0c;里面的代碼比較混亂&#xff0c;排查解決了一個問題&#xff0c;決定將這個思路記錄下來&#xff0c;希望能幫助更多的人。 其中一部分的代碼信息如下&#xff1a; 備注&#xff1a;為了避免公司的相關數據信息暴露&#xff0…

V9數據庫替換授權

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;9.0 文檔用途 1、本文檔用于指導V9數據庫替換授權。 2、V9數據庫授權文件為license.dat。 詳細信息 1、上傳新的授權文件到服務器并修改授權文件屬主為…

初識 Flask 框架

目錄 1. Flask 框架概述 1.1 安裝 Flask 1.2 創建你的第一個 Flask 應用 1.3 運行 Flask 應用 2. Flask 路由與視圖函數 2.1 動態路由 2.2 支持多種 HTTP 請求方法 2.3 使用 Jinja2 模版渲染 HTML 2.5 模版繼承與塊 3. Flask 表單處理與用戶輸入 3.1 安裝 Flask-WTF …

《深入剖析:Python自動化測試框架之unittest與pytest》

unittest作為Python標準庫的一部分&#xff0c;猶如一位沉穩可靠的“老工匠”&#xff0c;默默為無數項目提供著堅實的測試基礎。它誕生于Python社區長期的實踐沉淀&#xff0c;擁有一套標準化的測試體系&#xff0c;就像一套精密的儀器&#xff0c;各個部件各司其職。 unitte…