前言
上篇教程介绍了 Apache IoTDB 处理时序数据时,能够实现的部分具体功能和具体的操作命令,包括数据导入、基本查询、和聚合查询。
本篇将继续介绍 Apache IoTDB 可实现的其他功能和相关 SQL 语句命令,包括数据的写入、删除、导出、元数据操作和时区设置的注意事项。
1
数据写入、删除与导出
1.1
插入数据
物联网场景下,元件产生数据将自动写入,但有时候,如果过去的一些数据需要修改,可以使用 insert 语句插入修改后的值,覆盖原数据。
例如,我们可以向已有的时间序列 root.BHSFC.Q1.W002.speed 中插入单行数据,SQL 语句如下:
insert into root.BHSFC.Q1.W003(timestamp,speed) values(1657472400000,2)
我们可以使用查询语句查看是否插入成功:
select speed from root.BHSFC.Q1.W003
显示结果如下,可知已插入成功:
IoTDB> select speed from root.BHSFC.Q1.W003
+-----------------------------+------------------------+
| Time|root.BHSFC.Q1.W003.speed|
+-----------------------------+------------------------+
|2022-07-11T00:00:00.000+08:00| 1.0|
|2022-07-11T01:00:00.000+08:00| 2.0|
+-----------------------------+------------------------+
Total line number = 2
1.2
删除数据
1.2.1 SQL语句删除
1.2.1.1 删除整个时间序列
我们可以使用 SQL 语句删除单个时间序列,例如以下的 SQL 语句:
delete from root.BHSFC.Q1.W003.speed
我们可以验证一下,输入查询语句 select speed from root.BHSFC.Q1.W003 ,输出结果已经没有数据了,说明删除成功了:
```
IoTDB> select speed from root.BHSFC.Q1.W003
+----+------------------------------+
|Time|root.BHSFC.Q1.W003.speed|
+----+------------------------------+
+----+------------------------------+
Empty set.
```
1.2.1.2 删除时间范围内的数据
也可以与 where 语句结合删除某个时间片段,如删除 2022 年 1 月 14 日零点之后的数据:
delete from root.BHSFC.Q1.W003 where time<=2022-01-14T00:00:00
1.2.2 TTL 自动删除
TTL 是数据存活时间,将针对存储组进行运作。设置 TTL 后 Apache IoTDB 将自动删除此时间之前的数据,设置完毕即刻生效。
1.2.2.1 设置 TTL
设置 TTL 的 SQL 语句为:
set ttl to root.BHSFC.Q1.W003 3600000
这条语句表示在 root.BHSFCQ1.W003 设备中,最近一个小时的数据将会保存,旧数据会被删除。
1.2.2.2 取消 TTL
我们也可以取消这条时间序列的 TTL ,SQL 语句为:
unset ttl to root.BHSFC.Q1.W003
1.2.2.3 显示 TTL
我们还可以查询目前已设置的 TTL ,SQL 语句为:
show all ttl
输出的结果为:
+-------------+----+
|storage group| ttl|
+-------------+----+
| root.ln|null|
| root.BHSFC|null|
+-------------+----+
Total line number = 2
未设置 TTL 的存储组的 TTL 将显示为 null。
1.3
导出数据
我们可以使用 CSV 工具将数据导出。首先进入 tools 目录,然后输入 SQL 语句:
./export-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./
之后会出现提示输入查询语句,我们按需输入 SQL 语句即可。例如我们要导出测试数据的平均值,则输入:
select AVG(*) from root.BHSFC.Q1.W002
结果显示如下:
ExportCsv> please input query: select AVG(*) from root.BHSFC.Q1.W002
select AVG(*) from root.BHSFC.Q1.W002
19:23:27.053 [main] DEBUG org.apache.iotdb.session.Session - EndPoint(ip:127.0.0.1, port:6667) execute sql select AVG(*) from root.BHSFC.Q1.W002
Export completely!
成功导出了一个 CSV 表格,内容为:
AVG(root.BHSFC.Q1.W002.WROT_HubTmp)
17.683083226110213
至此,结合上篇我们完整的了解了 IoTDB 在数据写入、导入、修改、查询、导出周期的基本操作实现和命令语句设置。但除此之外,还有一部分操作非常重要,了解它们将会让我们对 IoTDB 的整体数据结构能实现的功能有更好的了解,这就是元数据管理。
2
元数据管理
元数据是关于数据的组织、数据域及其关系的信息。元数据管理将使我们对 IoTDB 存入数据的源、目标、转换规则等有更加深入的了解,和管理调整的能力。
下面将从 5 个部分来阐释 IoTDB 中涉及的元数据管理: