IoTDB 学习笔记
IoTDB 的 SQL 语句
数据库管理
bash
# 创建名为root.ln的数据库
CREATE DATABASE root.ln
# 查看所有数据库
SHOW DATABASES
# 删除名为root.ln的数据库
DELETE DATABASE root.ln
# 统计时间序列的总数
COUNT TIMESERIES root.**
# 统计某通配符路径下的时间序列数量
COUNT TIMESERIES roo.ln.**时间序列路径管理
bash
# 查看设备
SHOW DEVICES
# 查看root.ln的下一层路径
SHOW CHILD PATHS root.ln
# 查看 root.ln 的下一层节点
SHOW CHILD NODES root.ln
# 统计所有设备
COUNT DEVICES
# 统计路径中指定层级的节点个数
COUNT NODES root.ln.** LEVEL=2查询数据
bash
# 查询root.ln.wf01.wt01设备下的所有时间序列数据
SELECT * FROM root.ln.wf01.wt01
# 根据时间戳进行筛选查询
SELECT temperature FROM root.ln.wf01.wt01 WHERE time > 2022-01-01T00:05:00.00
# 使用last查询最新点数据
SELECT last * FROM root.ln.wf01.wt01注意事项
root作为一个保留字符,它只允许出现在下文提到的时间序列的开头,若其他层级出现root,则无法解析,提示报错。- 除了时间序列的开头的层级(
root)外,其他的层级支持的字符如下:- [ 0-9 a-z A-Z _ ] (字母,数字,下划线)
- ['\u2E80'..'\u9FFF'] (UNICODE 中文字符)
- 特别地,如果系统在 Windows 系统上部署,那么 database 路径结点名是大小写不敏感的。例如,同时创建
root.ln和root.LN是不被允许的。 - 如果需要在路径结点名中用特殊字符,可以用反引号引用路径结点名。
IoTDB 数据类型
基本数据类型
- BOOLEAN(布尔值)
- INT32(整型)
- INT64(长整型)
- FLOAT(单精度浮点数)
- DOUBLE(双精度浮点数)
- TEXT(长字符串)
- STRING(字符串)
- BLOB(大二进制对象)
- TIMESTAMP(时间戳)
- DATE(日期)
其中,STRING 和 TEXT 类型的区别在于,STRING 类型具有更多的统计信息,能够用于优化值过滤查询。TEXT 类型适合用于存储长字符串。
在创建 FLOAT 和 DOUBLE 类型的序列,采用 RLE 或 TS_2DIFF,可以在创建时通过MAX_POINT_NUMBER 属性指定浮点数的小数点后位数
sql
CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=FLOAT, ENCODING=RLE, 'MAX_POINT_NUMBER'='2';若未指定,则默认为 2 位小数。
| 序列数据类型 | 支持的写入数据类型 |
|---|---|
| BOOLEAN | BOOLEAN |
| INT32 | INT32 |
| INT64 | INT32 INT64 |
| FLOAT | INT32 FLOAT |
| DOUBLE | INT32 INT64 FLOAT DOUBLE |
| TEXT | TEXT |
时间戳类型
绝对时间戳
绝对时间戳分为二种,一种为 LONG 类型,一种为 DATETIME 类型。
相对时间戳
| 符号 | 含义 | 表示 | 例子 |
|---|---|---|---|
| y | year | 1y=365 days | 1y |
| mo | month | 1mo=30 days | 1mo |
| w | week | 1w=7 days | 1w |
| d | day | 1d=1 day | 1d |
| h | hour | 1h=3600 seconds | 1h |
| m | minute | 1m=60 seconds | 1m |
| s | second | 1s=1 second | 1s |
| ms | millisecond | 1ms=1000_000 nanoseconds | 1ms |
| us | microsecond | 1us=1000 nanoseconds | 1us |
| ns | nanosecond | 1ns=1 nanosecond | 1ns |
示例:
now() - 1d2h //比服务器时间早 1 天 2 小时的时间
now() - 1w //比服务器时间早 1 周的时间注意:'+'和'-'的左右两边必须有空格