数据操作语言
插入实时数据
IoTDB provides users with a variety of ways to insert real-time data, such as directly inputting INSERT SQL statement in Client/Shell tools, or using Java JDBC to perform single or batch execution of INSERT SQL statement.
本节主要介绍插入SQL语句用于场景中的实时数据导入。
在本节的场景中,取两个时间序列root.ln.wf02.wt02.status
和root.ln.wf02.wt02.hardware
例如,它们的数据类型分别是布尔型和文本型。
单列数据插入的示例代码如下:
IoTDB >insertintoroot.ln.wf02.wt02(timestamp,status)values(1,true)
IoTDB >insertintoroot.ln.wf02.wt02(timestamp,hardware)values(1, "v1")
上面的示例代码将长整数时间戳和值“true”插入到时间序列中root.ln.wf02.wt02.status
并将长整数时间戳和值“v1”插入到时间序列中root.ln.wf02.wt02.hardware
。当执行成功时,会显示成本时间以指示数据插入已经完成。
注意:在IoTDB中,文本类型数据可以用单引号和双引号表示。上面的插入语句对文本类型数据使用双引号。以下示例将对文本类型数据使用单引号。
INSERT语句还可以支持在同一时间点插入多列数据。在同一时间点“2”插入两个时间序列的值的示例代码如下:
IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (2, false, 'v2')
插入数据后,我们可以使用SELECT语句简单地查询插入的数据:
IoTDB > select * from root.ln.wf02 where time < 3
结果如下所示。从查询结果可以看出,单列和多列数据的插入语句执行正确。
INSERT语句的错误处理
例如,如果用户将数据插入到不存在的时间序列中,请执行以下命令:
IoTDB >insertintoroot.ln.wf02.wt02(timestamp,temperature)values(1,"v1")
因为root.ln.wf02.wt02. temperature
不存在,系统将返回以下错误信息:
Msg: The resultDataType or encoding or compression of the last node temperature is conflicting in the storage group root.ln
例如,如果用户插入的数据类型与时间序列的相应数据类型不一致,则执行以下命令:
IoTDB >insertintoroot.ln.wf02.wt02(timestamp,hardware)values(1,100)
系统将返回以下错误信息:
error: The TEXT data type should be covered by " or '
挑选
时间片查询
本章主要介绍使用IoTDB SELECT语句进行时间片查询的相关例子。详细的SQL语法和用法规范可以在SQL文档。
根据时间间隔选择一列数据
SQL语句是:
selecttemperaturefromroot.ln.wf01.wt01wheretime< 2017-11-01T00:08:00.000
这意味着:
所选设备为ln集团wf01厂wt01设备;选定的时间序列是温度传感器(温度)。SQL语句要求选择“2017-11-01T00:08:00.000”时间点之前的所有温度传感器值。
该SQL语句的执行结果如下:
根据时间间隔选择多列数据
SQL语句是:
selectstatus, temperature from root.ln.wf01.wt01 wheretime> 2017-11-01T00:05:00.000 andtime< 2017-11-01T00:12:00.000;
这意味着:
所选设备为ln集团wf01厂wt01设备;选定的时间系列是“状态”和“温度”。SQL语句要求选择“2017-11-01T00:05:00.000”和“2017-11-01T00:12:00.000”时间点之间的状态和温度传感器值。
该SQL语句的执行结果如下:
根据多个时间间隔为同一设备选择多列数据
IoTDB支持在一个查询中指定多个时间间隔条件。用户可以根据需要任意组合时间间隔条件。例如,SQL语句是:
selectstatus,temperature from root.ln.wf01.wt01 where (time> 2017-11-01T00:05:00.000 andtime< 2017-11-01T00:12:00.000) or (time>= 2017-11-01T16:35:00.000 andtime<= 2017-11-01T16:37:00.000);
这意味着:
所选设备为ln集团wf01厂wt01设备;选择的时间序列是“状态”和“温度”;该语句指定了两个不同的时间间隔,即“2017-11-01T00:05:00.000至2017-11-01T00:12:00.000”和“2017-11-01T16:35:00.000至2017-11-01T16:37:00.000”。SQL语句要求选择满足任何时间间隔的选定时间序列的值。
该SQL语句的执行结果如下:
根据多个时间间隔为不同的设备选择多列数据
系统支持在查询中选择任何列中的数据,即所选择的列可以来自不同的设备。例如,SQL语句是:
select wf01.wt01.status,wf02.wt02.hardware from root.ln where (time> 2017-11-01T00:05:00.000 andtime< 2017-11-01T00:12:00.000) or (time>= 2017-11-01T16:35:00.000 andtime<= 2017-11-01T16:37:00.000);
这意味着:
选择的时间序列为“ln集团wf01厂wt01装置的电源状态”和“ln集团wf02厂wt02装置的硬件版本”;该语句指定了两个不同的时间间隔,即“2017-11-01T00:05:00.000至2017-11-01T00:12:00.000”和“2017-11-01T16:35:00.000至2017-11-01T16:37:00.000”。SQL语句要求选择满足任何时间间隔的选定时间序列的值。
该SQL语句的执行结果如下: