博客 / 詳情

返回

時序數據庫 TimechoDB V2.0.8 發佈 | 新增 Object 數據類型、協變量預測等功能

TimechoDB V2.0.8 版本正式發佈!

TimechoDB 是由 IoTDB 原廠團隊開發的企業級時序數據庫產品。V2.0.8 版本表模型新增 Object 數據類型,強化升級審計日誌功能,優化樹模型 OPC UA 協議,AINode 支持協變量預測與併發推理等功能,同時對數據庫監控、性能、穩定性進行了全方位提升。

更多關於 V2.0.8 版本信息,歡迎聯繫我們獲得企業版安裝包。針對本版本主要核心功能,年後將有更詳細的技術解析與直播講解,敬請關注!

主要發佈內容

  • 查詢模塊:新增 DataNode 可用節點的列表展示,可查看節點的 RPC 地址和端口

  • 查詢模塊:表模型新增統計查詢耗時的系統表

  • 存儲模塊:支持通過 SQL 查看創建表/視圖的完整定義語句

  • 存儲模塊:優化樹模型 OPC UA 協議

  • 系統模塊:表模型新增 Object 數據類型

  • 系統模塊:強化升級審計日誌功能

  • 系統模塊:表模型新增 DataNode 節點連接情況的系統表

  • AINode:內置 chronos-2 模型,支持協變量預測功能

  • AINode:Timer-XL、Sundial 內置模型支持併發推理功能

  • 流處理模塊:創建全量同步 pipe 會自動拆分為實時、歷史兩個獨立 pipe,可通過 show pipes 語句分別查看剩餘事件數

  • 其他:修復安全漏洞 CVE-2025-12183、CVE-2025-66566、CVE-2025-11226

...

本版本詳細發佈內容請查看天謀科技官網-發佈歷史頁面:

https://timecho.com/docs/zh/UserGuide/latest/IoTDB-Introduction/Release-history_timecho.html

功能詳解:AINode 協變量預測功能

功能介紹

  • 單變量預測:支持對單一目標變量進行預測。

  • 協變量預測:可同時對多個目標變量進行聯合預測,並支持在預測中引入協變量,以提升預測的準確性。

語法:

SELECT * FROM FORECAST(
   MODEL_ID,
   TARGETS, -- 獲取目標變量的 SQL
   [HISTORY_COVS, -- 字符串,用於獲取歷史協變量的 SQL
   FUTURE_COVS, -- 字符串,用於獲取未來協變量的 SQL
   OUTPUT_START_TIME,
   OUTPUT_LENGTH, 
   OUTPUT_INTERVAL,
   TIMECOL, 
   PRESERVE_INPUT,
   MODEL_OPTIONS]?
)

語法説明:

  • model_id:必填,String 類型,預測所用模型的唯一標識。

  • targets:必填,通過 SQL 輸入待預測目標變量的輸入數據。

  • history_covs:通過 SQL 輸入預測任務協變量的歷史數據,用於輔助目標變量的預測。

  • future_covs:通過 SQL 輸入預測任務協變量的未來數據,用於輔助目標變量的預測。

  • output_start_time:時間戳類型,輸出的預測點的起始時間戳(起報時間)。

  • output_length:INT32 類型,輸出窗口大小。

  • output_interval:時間間隔類型,輸出的預測點之間的時間間隔。

  • timecol:String 類型,預測依據的時間列名。

  • preserve_input:Boolean 類型,輸出結果集中是否保留目標變量輸入的所有原始行。

  • model_options:String 類型,模型相關的 key-value 對。

使用舉例

示例數據

創建數據庫與源表,插入測試數據:

-- 1. 創建數據庫
CREATE DATABASE testdb;
USE testdb;

-- 2. 創建源表
create table tab_real (
    target1 DOUBLE FIELD, 
    target2 DOUBLE FIELD, 
    cov1 DOUBLE FIELD, 
    cov2 DOUBLE FIELD, 
    cov3 DOUBLE FIELD
);

-- 3. 插入測試數據
INSERT INTO tab_real (time, target1, target2, cov1, cov2, cov3) VALUES
(1, 1.0, 1.0, 1.0, 1.0, 1.0),
(2, 2.0, 2.0, 2.0, 2.0, 2.0),
(3, 3.0, 3.0, 3.0, 3.0, 3.0),
(4, 4.0, 4.0, 4.0, 4.0, 4.0),
(5, 5.0, 5.0, 5.0, 5.0, 5.0),
(6, 6.0, 6.0, 6.0, 6.0, 6.0),
(7, NULL, NULL, 7.0, NULL, NULL),
(8, NULL, NULL, 8.0, NULL, NULL);

示例 1:使用歷史協變量 cov1,cov2 和 cov3 輔助預測目標變量 target1 和 target2

e70982b47d51e74c1606ca84f180f4d7

-- 使用表 tab_real 中 cov1,cov2,cov3,target1,target2 的前 6 行歷史數據,預測目標變量 target1 和 target2 未來的 2 行數據
SELECT * FROM FORECAST (
    MODEL_ID => 'chronos2',
    TARGETS => (
        SELECT TIME, target1, target2
        FROM etth.tab_real
        WHERE TIME < 7
        ORDER BY TIME DESC
        LIMIT 6) ORDER BY TIME,
    HISTORY_COVS => '
        SELECT TIME, cov1, cov2, cov3
        FROM etth.tab_real
        WHERE TIME < 7
        ORDER BY TIME DESC
        LIMIT 6',
    OUTPUT_LENGTH => 2
)

執行結果:

+-----------------------------+-----------------+-----------------+
|                         time|          target1|          target2|
+-----------------------------+-----------------+-----------------+
|1970-01-01T08:00:00.007+08:00|7.338330268859863|7.338330268859863|
|1970-01-01T08:00:00.008+08:00| 8.02529525756836| 8.02529525756836|
+-----------------------------+-----------------+-----------------+
Total line number = 2
It costs 0.315s

示例 2:使用相同表中的已知協變量 cov1 和歷史協變量 cov2,cov3 輔助預測目標變量 target1 和 target2

e7eecdaa4895d9c5fea460f7d03dddf7

-- 使用表 tab_real 中 cov1,cov2,cov3,target1,target2 的前 6 行歷史數據,以及同表中已知協變量 cov3 在未來的 2 行數據,來預測目標變量 target1 和 target2 未來的 2 行數據
SELECT * FROM FORECAST (
    MODEL_ID => 'chronos2',
    TARGETS => (
        SELECT TIME, target1, target2
        FROM etth.tab_real
        WHERE TIME < 7
        ORDER BY TIME DESC
        LIMIT 6) ORDER BY TIME,
    HISTORY_COVS => '
        SELECT TIME, cov1, cov2, cov3
        FROM etth.tab_real
        WHERE TIME < 7
        ORDER BY TIME DESC
        LIMIT 6',
    FUTURE_COVS => '
        SELECT TIME, cov1
        FROM etth.tab_real
        WHERE TIME >= 7
        LIMIT 2',
    OUTPUT_LENGTH => 2
)

執行結果:

+-----------------------------+-----------------+-----------------+
|                         time|          target1|          target2|
+-----------------------------+-----------------+-----------------+
|1970-01-01T08:00:00.007+08:00|7.244050025939941|7.244050025939941|
|1970-01-01T08:00:00.008+08:00|7.907227516174316|7.907227516174316|
+-----------------------------+-----------------+-----------------+
Total line number = 2
It costs 0.291s

功能詳解:表模型新增 Object 數據類型

功能介紹

Object 是新增的二進制數據類型,主要用於存儲文檔、音頻、視頻等較大的二進制文件,可實現非結構化文件與 IoTDB 時序數據的統一管理。

該類型與 BLOB 類型的區別為:查詢 Object 列時,返回結果展示:(Object) XX.XX KB,真實 Object 數據存儲路徑為:${data_dir}/object_data,可通過 READ_OBJECT 函數讀取其真實內容;而 BLOB 列查詢時會直接返回完整的二進制原始內容。

注意:Object 類型本版本暫不支持樹模型,表模型的數據同步、導入導出、數據寫回等功能將在後續版本中適配。

基礎功能

數據寫入

語法:

insert into tableName(time, columnName) values(timeValue, to_object(isEOF, offset, content));

參數説明:

  • isEOF:Boolean 類型,本次寫入內容是否為 Object 的最後一部分

  • offset:INT64 類型,本次寫入的內容在 Object 中的起始偏移量

  • content:十六進制(hex)格式,本次寫入的 Object 內容

使用舉例:

示例:向表 table1 中增加 Object 類型字段 s1,並寫入總大小為 5 字節的 Object

ALTER TABLE table1 ADD COLUMN IF NOT EXISTS s1 OBJECT FIELD COMMENT 'object類型'

  • 不分段寫入:

insert into table1(time, device_id, s1) values(now(), 'tag1', to_object(true, 0, X'696F746462'));

  • 分段寫入:
--分段寫入 Object 數據
--第一次寫入:to_object(false, 0, X'696F')
insert into table1(time, device_id, s1) values(1, 'tag1', to_object(false, 0, X'696F'));
--第二次寫入:to_object(false, 2, X'7464')
insert into table1(time, device_id, s1) values(1, 'tag1', to_object(false, 2, X'7464'));
--第三次寫入:to_object(true, 4, X'62')
insert into table1(time, device_id, s1) values(1, 'tag1', to_object(true, 4, X'62'));

數據查詢

注意:

  • Object 類型不支持使用 GROUP BY、ORDER BY、OFFSET、LIMIT 子句。

  • Object 類型使用 FILL 子句只支持 PREVIOUS 的填充方式。

使用舉例:

示例一:直接查詢 Object 類型數據

select s1 from table1 where device_id = 'tag1'
執行結果:

+------------+
|          s1|
+------------+
|(Object) 5 B|
+------------+
Total line number = 1
It costs 0.428s

示例二:通過 read_object 函數查詢 Object 類型數據的真實內容

select read_object(s1) from table1 where device_id = 'tag1'
執行結果:

+------------+
|       _col0|
+------------+
|0x696f746462|
+------------+
Total line number = 1
It costs 0.188s
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.