Influxdb基础指令
指令忽略大小写
数据库操作
查询数据库
show databases
_internal数据库为influxDB用来存内部运行指标的数据库
使用数据库
use database
创建数据库
CREATE DATABASE database
创建数据库会使用默认的数据保存策略,也可以自己新建。一个库可以有多个保存策略
数据库中一条记录包含如下:
- time: 一个时间戳
- measurement: 度量指标(类似于一般数据库中的表)
- field: 至少一个字段,是一个key-value类型,用于保存真正的值.不会为field创建索引
- tags: 为一条记录打一个标签,可以有0个或多个.tags会创建索引 tag必须是字符类型 值需要加引号
删除数据库
DROP DATABASE database
存储策略操作
当一个表使用的策略不是默认策略时,在进行操作时一定要显式的指定策略名称
查询存储策略
SHOW RETENTION POLICIES ON database
新建存储策略
CREATE RETENTION POLICY "autogen" ON "database" DURATION 2h REPLICATION 1 DEFAULT
在 database 数据库创建名为 autogen 持续时间 2小时 副本个数 1 的默认存储策略
修改存储策略
ALTER RETENTION POLICY "autogen" ON "database" DURATION 4h DEFAULT
删除存储策略
drop retention POLICY "autogen" ON "database"
用户权限操作
查询用户
show users
创建用户
CREATE USER "username" WITH PASSWORD 'password'
创建管理员权限的用户
CREATE USER <username> WITH PASSWORD '<password>' WITH ALL PRIVILEGES
删除用户
DROP USER "username"
表操作
查询表名
show measurements
新增表
INSERT measurements,sensorId=101000102,status=0,saveTime=2019-12-23\ 00:00:00 value=3 1600653383879282000
插入数据时,生成对应的表
INSERT 表名,tag1= ,tag2= field1= ,field2= time
tag,field 通过空格隔开,tag与tag 通过 逗号隔开,field与tag 相同。time 为时间戳,可以不填
修改表
新增表后,已有的字段类型不可变,新增的字段根据insert 语句生成
删除表
drop measurement measurements
数据操作
新增
INSERT 表名,tag1= ,tag2= field1= ,field2= time
tag,field 通过空格隔开,tag与tag 通过 逗号隔开,field与tag 相同。time 为时间戳,可以不填
INSERT measurements,sensorId=101000102,status=0,saveTime=2019-12-23\ 00:00:00 value=3 1600653383879282000
新增到指定保存策略
INSERT into "策略名" his_entryday,uepId=1010001,value=-0.2685 dataTime="2019-12-23 00:00:00"
修改
不支持修改
删除
只允许根据tag和时间来进行删除操作
DELETE FROM <database> WHERE [<tag_key>='<tag_value>'] | [<time interval>]
DELETE FROM "measurements" WHERE time >= '2020-09-21T15:16:45Z' - 8h and time <= '2020-09-21T16:55:46Z' - 8h
查询
SELECT last("value") AS "value" FROM "test"."autogen"."measurements" WHERE time >= '2020-09-21T15:16:45Z' - 8h and time <= '2020-09-21T16:55:46Z' - 8h GROUP BY time(1m),sensorId FILL(0)
time因为时差问题,需要 - 8h
函数
-
GROUP BY time(1m) 根据时间 1m 进行聚合,无数据的数据为空
GROUP BY time(1m) 外添加 select count(*) from 取数据数量会导致空数据不计入数据行数,用FILL() 会导致count数异常 -
FILL(0) 将空数据自动填充 0
-
LIMIT 子句,返回查询结果的前N条points。(不同的Series都包含N条points)
SLIMIT 返回指定measurement的前N个series的所有point。(N个Series包含所有points,需要与group by 一块使用)
当LIMIT 和SLIMIT 一起使用时,表示的意思是查询指定measurement前N个series的前N个point。
一些概念
- Point
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point相当于传统数据库里的一行数据,如下表所示:
Point属性 传统数据库中的概念
time 每个数据记录时间,是数据库中的主索引(会自动生成)
fields 各种记录值(没有索引的属性)
tags 各种有索引的属性 - Series
Series 相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。 - 特殊字符和单双引号的使用
- insert
- 时间戳不要双或单引号。
- field value不要单引号,即时是字符串类型。
- 当field value是整数,浮点数或是布尔型时,不要使用双引号,不然InfluxDB会假定值是字 符串类型:
- 当Field value是字符串时,使用双引号
- measurement名称,tag keys,tag value和field key不用单双引号。InfluxDB会假定引号是 名称的一部分。
- select
- tag value 只能用单引号
- 特殊字符
- 对于tag key,tag value和field key,始终使用反斜杠字符\来进行转义:
例 逗号 /,
空格 /空格
等号 /=
- 对于tag key,tag value和field key,始终使用反斜杠字符\来进行转义:
- insert
示例
目前使用sql ,可以正常分页
- 分组数据:
select * from (SELECT last("value") AS "value" FROM "test"."autogen"."measurements" WHERE time >= '2020-09-21T15:16:45Z' - 8h and time <= '2020-09-21T16:55:46Z' - 8h GROUP BY time(1m),a)GROUP BY a
- 数据总量
select count(*) from (SELECT last("value") AS "value" FROM "test"."autogen"."measurements" WHERE time >= '2020-09-21T15:16:45Z' - 8h and time <= '2020-09-21T16:55:46Z' - 8h GROUP BY time(1m),a)