數(shù)據(jù)寫入
數(shù)據(jù)寫入
1. CLI寫入數(shù)據(jù)
IoTDB 為用戶提供多種插入實時數(shù)據(jù)的方式,例如在 Cli/Shell 工具 中直接輸入插入數(shù)據(jù)的 INSERT 語句,或使用 Java API(標準 Java JDBC 接口)單條或批量執(zhí)行插入數(shù)據(jù)的 INSERT 語句。
本節(jié)主要為您介紹實時數(shù)據(jù)接入的 INSERT 語句在場景中的實際使用示例,有關 INSERT SQL 語句的詳細語法請參見本文 INSERT 語句 節(jié)。
注:寫入重復時間戳的數(shù)據(jù)則原時間戳數(shù)據(jù)被覆蓋,可視為更新數(shù)據(jù)。
1.1 使用 INSERT 語句
使用 INSERT 語句可以向指定的已經創(chuàng)建的一條或多條時間序列中插入數(shù)據(jù)。對于每一條數(shù)據(jù),均由一個時間戳類型的時間戳和一個數(shù)值或布爾值、字符串類型的傳感器采集值組成。
在本節(jié)的場景實例下,以其中的兩個時間序列root.ln.wf02.wt02.status和root.ln.wf02.wt02.hardware為例 ,它們的數(shù)據(jù)類型分別為 BOOLEAN 和 TEXT。
單列數(shù)據(jù)插入示例代碼如下:
IoTDB > insert into root.ln.wf02.wt02(timestamp,status) values(1,true)
IoTDB > insert into root.ln.wf02.wt02(timestamp,hardware) values(1, 'v1')以上示例代碼將長整型的 timestamp 以及值為 true 的數(shù)據(jù)插入到時間序列root.ln.wf02.wt02.status中和將長整型的 timestamp 以及值為”v1”的數(shù)據(jù)插入到時間序列root.ln.wf02.wt02.hardware中。執(zhí)行成功后會返回執(zhí)行時間,代表數(shù)據(jù)插入已完成。
注意:在 IoTDB 中,TEXT 類型的數(shù)據(jù)單雙引號都可以來表示,上面的插入語句是用的是雙引號表示 TEXT 類型數(shù)據(jù),下面的示例將使用單引號表示 TEXT 類型數(shù)據(jù)。
INSERT 語句還可以支持在同一個時間點下多列數(shù)據(jù)的插入,同時向 2 時間點插入上述兩個時間序列的值,多列數(shù)據(jù)插入示例代碼如下:
IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) values (2, false, 'v2')此外,INSERT 語句支持一次性插入多行數(shù)據(jù),同時向 2 個不同時間點插入上述時間序列的值,示例代碼如下:
IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (3, false, 'v3'),(4, true, 'v4')插入數(shù)據(jù)后我們可以使用 SELECT 語句簡單查詢已插入的數(shù)據(jù)。
IoTDB > select * from root.ln.wf02.wt02 where time < 5結果如圖所示。由查詢結果可以看出,單列、多列數(shù)據(jù)的插入操作正確執(zhí)行。
+-----------------------------+--------------------------+------------------------+
| Time|root.ln.wf02.wt02.hardware|root.ln.wf02.wt02.status|
+-----------------------------+--------------------------+------------------------+
|1970-01-01T08:00:00.001+08:00| v1| true|
|1970-01-01T08:00:00.002+08:00| v2| false|
|1970-01-01T08:00:00.003+08:00| v3| false|
|1970-01-01T08:00:00.004+08:00| v4| true|
+-----------------------------+--------------------------+------------------------+
Total line number = 4
It costs 0.004s此外,我們可以省略 timestamp 列,此時系統(tǒng)將使用當前的系統(tǒng)時間作為該數(shù)據(jù)點的時間戳,示例代碼如下:
IoTDB > insert into root.ln.wf02.wt02(status, hardware) values (false, 'v2')注意: 當一次插入多行數(shù)據(jù)時必須指定時間戳。
1.2 向對齊時間序列插入數(shù)據(jù)
向對齊時間序列插入數(shù)據(jù)只需在SQL中增加ALIGNED關鍵詞,其他類似。
示例代碼如下:
IoTDB > create aligned timeseries root.sg1.d1(s1 INT32, s2 DOUBLE)
IoTDB > insert into root.sg1.d1(time, s1, s2) aligned values(1, 1, 1)
IoTDB > insert into root.sg1.d1(time, s1, s2) aligned values(2, 2, 2), (3, 3, 3)
IoTDB > select * from root.sg1.d1結果如圖所示。由查詢結果可以看出,數(shù)據(jù)的插入操作正確執(zhí)行。
+-----------------------------+--------------+--------------+
| Time|root.sg1.d1.s1|root.sg1.d1.s2|
+-----------------------------+--------------+--------------+
|1970-01-01T08:00:00.001+08:00| 1| 1.0|
|1970-01-01T08:00:00.002+08:00| 2| 2.0|
|1970-01-01T08:00:00.003+08:00| 3| 3.0|
+-----------------------------+--------------+--------------+
Total line number = 3
It costs 0.004s2. 原生接口寫入
原生接口 (Session) 是目前IoTDB使用最廣泛的系列接口,包含多種寫入接口,適配不同的數(shù)據(jù)采集場景,性能高效且支持多語言。
2.1 多語言接口寫入
3. REST API寫入
參考 insertTablet (v1) or insertTablet (v2)
示例如下:
{
? ? ? "timestamps": [
? ? ? ? ? ? 1,
? ? ? ? ? ? 2,
? ? ? ? ? ? 3
? ? ? ],
? ? ? "measurements": [
? ? ? ? ? ? "temperature",
? ? ? ? ? ? "status"
? ? ? ],
? ? ? "data_types": [
? ? ? ? ? ? "FLOAT",
? ? ? ? ? ? "BOOLEAN"
? ? ? ],
? ? ? "values": [
? ? ? ? ? ? [
? ? ? ? ? ? ? ? ? 1.1,
? ? ? ? ? ? ? ? ? 2.2,
? ? ? ? ? ? ? ? ? 3.3
? ? ? ? ? ? ],
? ? ? ? ? ? [
? ? ? ? ? ? ? ? ? false,
? ? ? ? ? ? ? ? ? true,
? ? ? ? ? ? ? ? ? true
? ? ? ? ? ? ]
? ? ? ],
? ? ? "is_aligned": false,
? ? ? "device": "root.ln.wf01.wt01"
}4. MQTT寫入
參考 內置 MQTT 服務
5. 批量數(shù)據(jù)導入
針對于不同場景,IoTDB 為用戶提供多種批量導入數(shù)據(jù)的操作方式,本章節(jié)向大家介紹最為常用的兩種方式為 CSV文本形式的導入 和 TsFile文件形式的導入。
5.1 TsFile批量導入
TsFile 是在 IoTDB 中使用的時間序列的文件格式,您可以通過CLI等工具直接將存有時間序列的一個或多個 TsFile 文件導入到另外一個正在運行的IoTDB實例中。具體操作方式請參考數(shù)據(jù)導入。
5.2 CSV批量導入
CSV 是以純文本形式存儲表格數(shù)據(jù),您可以在CSV文件中寫入多條格式化的數(shù)據(jù),并批量的將這些數(shù)據(jù)導入到 IoTDB 中,在導入數(shù)據(jù)之前,建議在IoTDB中創(chuàng)建好對應的元數(shù)據(jù)信息。如果忘記創(chuàng)建元數(shù)據(jù)也不要擔心,IoTDB 可以自動將CSV中數(shù)據(jù)推斷為其對應的數(shù)據(jù)類型,前提是你每一列的數(shù)據(jù)類型必須唯一。除單個文件外,此工具還支持以文件夾的形式導入多個 CSV 文件,并且支持設置如時間精度等優(yōu)化參數(shù)。具體操作方式請參考數(shù)據(jù)導入。
6. 無模式寫入
在物聯(lián)網(wǎng)場景中,由于設備的類型、數(shù)量可能隨時間動態(tài)增減,不同設備可能產生不同字段的數(shù)據(jù)(如溫度、濕度、狀態(tài)碼等),業(yè)務上又往往需要快速部署,需要靈活接入新設備且無需繁瑣的預定義流程。因此,不同于傳統(tǒng)時序數(shù)據(jù)庫通常需要預先定義數(shù)據(jù)模型,IoTDB支持不提前創(chuàng)建元數(shù)據(jù),在寫入數(shù)據(jù)時,數(shù)據(jù)庫中將自動識別并注冊所需的元數(shù)據(jù),實現(xiàn)自動建模。
用戶既可以通過CLI使用insert語句或者原生接口的方式,批量或者單行實時寫入一個設備或者多個設備的測點數(shù)據(jù),也可以通過導入工具導入csv,TsFile等格式的歷史數(shù)據(jù),在導入過程中會自動創(chuàng)建序列,數(shù)據(jù)類型,壓縮編碼方式等元數(shù)據(jù)。