概要
本文主要是提炼出本人经常用到的或者说是比较常用的语句,希望对大家有所帮助,同时欢迎大家一起交流,后面的文章,因为我这项目是java启动的,后续会演示用java怎么链接IOTDB和配置一些参数,比如前面文章里面说到的一些单独的超时设定。下面放上前面的链接🔗。
国产IOTDB(1.3.2):第0集 本地Docker搭建展示和建议-CSDN博客
国产IOTDB(1.3.2):第1集 本地Docker部署之1-CSDN博客
国产IOTDB(1.3.2):第2集 本地Docker部署之2-CSDN博客
国产IOTDB(1.3.2):第3集 参数建议和优化-CSDN博客
正文开始:
1、DATABASE 数据库
查看目前数据库中的Database。因为iotdb默认都是用root开始的,所以不要自己在各种分支路径上再定义root了,不然就是自己给自己找事情不是。
show DATABASES;
我这里的__system应该是系统默认的数据库。下面的cs和ln是我后期创建的,这里我为啥没有先写创建database,是因为iotdb会把第二层,也就是root.后面的主动认为是database。大家在后面可以直接创建对应的序列/TIMESERIES,就可以了,不用主动创建。(注:如果涉及到文件分区等或者别的后期敏感的操作,这里还是建议主动创建Database。下面是实例)
CREATE DATABASE root.ln
此外,Database层应该就是组织结构的顶级了,比如说总公司,总长,集团……懂得自然懂。
2、TIMESERIES 时间序列
由于数据库特性,并不需要一层层创建对应的组织结构,可以直接创建序列,自动就有对应的结构了,所以就推荐大家现在纸上,或者其它软件商设计好整体的结构,尽量,尽量,尽量避免后期的改动。
2.1创建普通序列
CREATE TIMESERIES root.store1.s01.wt01.temperature WITH datatype=FLOAT,ENCODING=RLE;
再执行
show databases
可以看到对应的Database层store1已经有了。
2.2创建对齐的时间序列(本人更推荐这种)
CREATE ALIGNED TIMESERIES root.al_store.s02.GPS(latitude FLOAT encoding=PLAIN compressor=SNAPPY, longitude FLOAT encoding=PLAIN compressor=SNAPPY);
可以执行show devices;查看设备的一些属性内容。
此处root.al_store.s02.GPS对应的IsAligned显示未true表示这个设备下面的时间序列按照时间对齐。上面我说为啥我更推荐这种是因为,我这里需要采集的单个设备中,采集的设备信息都是同一时间采上来的,时间刻度相同,这样所有的采集点都可以使用同一个时间,就跟图表中多个Y轴数据使用同一个X轴的时间数据。下面用一张官方的图(S1,S2,S3都是采集点或者说是timeseries,都是来源于一个设备,左面是非对齐状态,右面是设备对齐状态。其中t代表时间)
2.3查看时间序列内容
show timeseries root.al_store.s02.GPS.*;
show timeseries root.**;
2.4删除序列
delete timeseries root.al_store.s02.GPS.latitude;
上面创建了两个序列删除一个指定的序列后:
批量删除设备下的所有序列:(谨慎使用)
delete timeseries root.al_store.s02.GPS.*;
3、查看子路径
注意这里说的是子路径。下面的语句大家可以先思考下应该是啥样的结果。
show child paths root.*;
下面是执行结果:
不知道是不是和大多数人想的一样。路径明明是root.*。也就是两级目录(root.**才是所有级别)所以上面我才说注意这里查询的是子路径,就是当前路径下面的子路径,根据上面路径,也就是说子路径都是三个的。
此外,这个对于一些业务场景,结合查看Datebase,是很容易整理或者说同步iotdb的信息的(* ̄︶ ̄)。
4、查看设备 devices
所谓设备(路径信息的末数第二层),可以对应到所要采集的设备信息上,但是建议取名的时候按照你的业务规则来,尽量一眼能看出来。
show devices;
show devices with database;
查询设备并连带着数据库信息,虽然可以从数据库路径上看出来,但是犹豫查询非常快,就不建议在某些场景下通过java来截取了。
查看特定数据库下面的设备
show devices root.ln.**;
5、写入数据
这里我主要就是复制sql了,因为我这主要是用java取数和展示,并不主要是负责采集。等到后面的文章里面再给大家演示怎么通过java往里面写入数据(因为我这有数据同步的一个业务需要。)
写入单列数据
insert into root.ln.wf02.wt02(timestamp,status) values(1,true);
insert into root.ln.wf02.wt02(timestamp,hardware) values(1, 'v1'),(2, 'v1');
写入多列数据
insert into root.ln.wf02.wt02(timestamp, status, hardware) values (2, false, 'v2');
insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (3, false, 'v3'),(4, true, 'v4');
使用服务器时间戳写入数据
insert into root.ln.wf02.wt02(status, hardware) values (false, 'v2');
:当不主动写入timestamp的时候,再插入数据时,就会采用服务器的当前时间去插入数据,此时一定要注意服务器的时间是否正确✅
写入对齐时间序列数据
create aligned timeseries root.sg1.d1(s1 INT32, s2 DOUBLE);
insert into root.sg1.d1(timestamp, s1, s2) aligned values(1, 1, 1);
insert into root.sg1.d1(timestamp, s1, s2) aligned values(2, 2, 2), (3, 3, 3);
结尾:
上面的sql语句,主要是我日常用的比较多的,然后摘取出来,尽量让需要的人少走弯路的,希望对各位看官有所帮助。做牛马的日子里面,大家一起努力!!!