InfluxDB 使用写入操作来自动创建表。当你向新的测量写入数据时,如果该测量不存在,则会自动创建一个新表。
insert <tbname>,<tags> <values> [timestamp]
在insert执行语句中,tag与tag、field与field之间用","进行分割,
tag与field之间用空格分割
tag的value都是String类型,不需要加双引号
field的String类型数据,需要放在双引号中,否则会报错
如果需要显示添加时间戳,在filed后添加空格,再添加时间戳
INSERT sensor_data,location=home,device_id=sensor001 temperature=25,humidity=50
上述写入操作将自动创建一个名为
sensor_data
的表,并将数据写入其中。
5.更新数据
在 InfluxDB 中,数据是不可变的,因此不能直接更新已有的数据点。如果要更改数据值,需要执行插入操作,并覆盖具有相同时间戳的数据。
假设要更新
sensor_data
测量中
temperature
字段的值为 26,可以执行以下操作:
INSERT sensor_data,location=home,device_id=sensor001 temperature=26,humidity=50
6.删除表与数据:
DROP MEASUREMENT measurement_name
根据过滤条件删除数据:
DELETE FROM sensor_data WHERE location='home' AND device_id='sensor001'
7.group by
在 InfluxDB 中,group by 只能用于对 tag 相关的字段进行分组,而不能对 field 字段进行分组。这是因为在 InfluxDB 的数据模型中,tag 是用来标识和过滤数据的元数据,而 field 则是实际存储数据的值。
在查询语句中,将
GROUP BY
关键字与适当的 tag 键名结合使用,以指定要分组的标签。
SELECT <aggregate_function>(<field_key>) FROM <measurement_name> GROUP BY <tag_key>
8.时间窗口
结合
time()
函数以及指定的时间范围,可以在分组查询中创建时间窗口。例如:
GROUP BY time(<interval>)
其中
<interval>
可以是秒、分钟、小时等单位: interval 可以直接使用时间缩写:如 1d == 1天, 1h == 1小时, 5m = 5分钟, 10s == 10秒,
9.查看tag得字段有哪些值
不可以使用distinct函数,distinct 函数可以对field生效,但对tag查询会失效
SHOW TAG VALUES FROM measurement WITH KEY = "location" WHERE time > now() - 1h
10.聚合函数
在进行分组查询时,需要使用适当的聚合函数(如
mean()
、
sum()
、
count()
等)对 field 进行计算。这样可以根据每个分组计算出相应的结果。
##最大值
SELECT SUM(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
##平均值
SELECT MEAN(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
##返回一个字段(field)的唯一值
SELECT DISTINCT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
##返回一个(field)字段中的非空值的数量
SELECT COUNT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
11.排序 order by time desc
influxdb 排序只能用于time 进行排序:升序:order by time asc,降序 order by time desc
select * from tableName order by time asc
12. FILL 数据空处理
空数据处理 fill(),相当于mysql的
IFNULL
的作用,但不能指定字段
给空数据赋予某个值,如下,给是空值的赋予0(可以赋予其它值,如-1、2),只能位于sql所有条件之后
select * from tableName fill(0)
13.模糊查询
以【模糊条件】开头的查询方式
SELECT * FROM "tablename" where column =~ /^模糊条件/ limit 1000
以【模糊条件】结尾的查询方式
SELECT * FROM "tablename" where column =~ /模糊条件$/ limit 1000
包含【模糊条件】的查询方式
SELECT * FROM "tablename" where column =~ /模糊条件/ limit 1000