InfluxDB基本操作

数据库 database

-- 库操作
- show databases;       查看所有库,默认有一个 '_internal'- create database test; 创建一个库 
- drop   database test; 删除一个库
- use 	 test; 					选中一个库
- clear  database|db;   清除当前上下文的库

表 measurement

注意:表不能显示创建,插入数据时自动插入表中数据。

-- 表操作
- show measurements;				查看所有表
- drop measurement "test";	删除一个表 	# 注意:删除表的时候,表名字最好加入双引号

插入数据

-- 基本语法
- insert [<retention policy>] measurement,tagKey=tagValue fieldKey=fieldValue [timestamp]
- 如:insert user,name=xw,phone=10086 sex="男",age=24,email="isxuewei@qq.com"

从上面的输出,简单小结一下插入的语句写法:

  1. insert + measurement + "," + tag=value,tag=value + + field=value,field=value
  2. tag 与 tag 之间用逗号分隔;field 与 field 之间用逗号分隔
  3. tag 与 field之间用空格分隔
  4. tag 都是 string 类型,不需要引号将 value 包裹
  5. field 如果是 string 类型,需要加引号
  6. <retention policy> 表示存储策略,可选,后面会详细解释

InfluxDB 不允许根据时间去删除数据,只能使用 <retention policy> 按照策略去自动删除

更新数据

如果在插入数据时,插入的数据的时间和 tags 与原有数据一致,则更新当前数据。

查询数据

测试数据如下图所示:

普通查询

-- 查询全部数据
SELECT * FROM room_data;

-- 根据 tag 过滤
SELECT * FROM room_data WHERE "code" = 'bedroom' ;
SELECT * FROM room_data WHERE "name" = '厨房';
-- 根据 field 过滤
SELECT * FROM room_data WHERE "health" = false;

-- 查询所有的 field,不查 tag
SELECT *::field FROM room_data;
-- InfluxDB 不允许只查询 tag,至少也要携带一个 field 查询
SELECT *::tag, mark  FROM room_data;

-- 模糊查询,注意=后面的为正则表达式,必须紧挨着=,前缀匹配:code 字段中以‘bed’开头的数据
SELECT * FROM room_data WHERE "code" =~/^bed/;
-- 模糊查询,注意=后面的为正则表达式,必须紧挨着=,后缀匹配:code 字段中以‘room’结尾的数据
SELECT * FROM room_data WHERE "code" =~/room$/;
-- 模糊查询,注意=后面的为正则表达式,必须紧挨着=,包含匹配:code 字段中包含‘e’的数据
SELECT * FROM room_data WHERE "code" =~/e/;

聚合函数

聚合函数只能对 field 字段进行操作,不能对 tag 字段操作,否则查询出来的列表是空的。不过可以使用子查询的方式解决这个问题。

-- DISTINCT 去重:对 tag 字段进行去重操作
SELECT DISTINCT("name") from (select * from room_data);
SELECT DISTINCT("code") from (select * from room_data);

-- DISTINCT 去重:对 field 字段进行去重操作
SELECT DISTINCT("humidity") from room_data;

-- COUNT 统计:查询某个 field 字段的中的非空值数量
SELECT COUNT("mark") from room_data; 

-- MEAN 平均:查询某个 field 字段的中的平均值
SELECT MEAN("mark") from room_data WHERE "code" = 'bedroom';

-- MEDIAN 中位数:排序查询某个 field 字段的中的中位数,如果是奇数返回一个值,如果是偶数返回中间两个数的平均数
SELECT MEDIAN("humidity") from room_data WHERE "code" = 'bedroom';

-- SPREAD 极差:返回某个 field 字段的中的最大值与最小值的差值
SELECT SPREAD("mark") from room_data WHERE "code" = 'bedroom';

-- SUM 求和
SELECT SUM("mark") from room_data WHERE "code" = 'bedroom';

-- MAX 最大值
SELECT MAX("mark") from room_data WHERE "code" = 'bedroom';

-- MIN 最小值
SELECT MIN("mark") from room_data WHERE "code" = 'bedroom';

-- BOTTOM 返回最小的 n 个值
SELECT BOTTOM("mark", 3) from room_data WHERE "code" = 'bedroom';

-- FIRST 最早:返回某个 field 最早保存的值
SELECT FIRST("mark") from room_data WHERE "code" = 'bedroom';

-- LAST 最晚:返回某个 field 最晚保存的值
SELECT LAST("mark") from room_data WHERE "code" = 'bedroom';

分组聚合

-- 查询所有数据,并对其划分为每200毫秒一组,如果对应的分组结果没有数据,那么会显示为 NULL
select MEAN("mark") from room_data WHERE "code" = 'bedroom' group by time(200ms);

-- 查询所有数据,并对其划分为每2秒一组,如果对应的分组结果没有数据,那么会显示为 NULL
select MEAN("mark") from room_data WHERE "code" = 'bedroom' group by time(2s);

-- 查询所有数据,并对其划分为每2分钟一组,如果对应的分组结果没有数据,那么会显示为 NULL
select MEAN("mark") from room_data WHERE "code" = 'bedroom' group by time(2m);

-- 查询所有数据,并对其划分为每2小时一组,如果对应的分组结果没有数据,那么会显示为 NULL
select MEAN("mark") from room_data WHERE "code" = 'bedroom' group by time(2h);

-- 查询所有数据,并对其划分为每2星期一组,如果对应的分组结果没有数据,那么会显示为 NULL
select MEAN("mark") from room_data WHERE "code" = 'bedroom' group by time(2d);

-- 查询所有数据,并对其划分为每200毫秒一组,如果对应的分组结果没有数据,那么会显示为 NULL
select MEAN("mark") from room_data WHERE "code" = 'bedroom' group by time(2w);

分页查询

LIMIT 用法有 2 种:
	1. limit 10:查询前 10 条数据
  2. limit size offset N:size 表示每页大小,N 表示第几条记录开始查询,从 0 开始
  
# 查询前 10 条数据
- select * from room_data limit 10
# 分页,pageSize 为每页显示大小,pageIndex 为查询的页数
 pageIndex = 1
 pageSize = 10
- select * from room_data limit pageSize offset (pageIndex-1)*pageSize

排序

# 升序
select * from room_data order by time asc
# 降序
select * from room_data order by time desc

in 查询

InfluxDB 想要实现 in 的效果,可以使用正则表达式的方式。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于Java操作InfluxDB 1.7版本,你可以使用InfluxDB Java Client来实现。以下是一些基本示例代码,帮助你开始使用: 首先,你需要在你的项目中添加InfluxDB Java Client的依赖。你可以通过Maven或Gradle来添加依赖,具体可以参考InfluxDB Java Client的官方文档。 接下来,你需要创建一个InfluxDB对象,并连接到InfluxDB服务器: ```java import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; public class InfluxDBExample { public static void main(String[] args) { String url = "http://localhost:8086"; String username = "your-username"; String password = "your-password"; String database = "your-database"; InfluxDB influxDB = InfluxDBFactory.connect(url, username, password); influxDB.setDatabase(database); // 这里可以进行后续的操作,如查询数据、写入数据等 } } ``` 以上代码中,你需要将`url`、`username`、`password`和`database`替换为你自己的InfluxDB服务器的相关信息。 接下来,你可以执行一些基本操作,如查询数据、写入数据等。以下是一些示例代码: 1. 查询数据: ```java import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; import org.influxdb.dto.Query; import org.influxdb.dto.QueryResult; public class InfluxDBExample { public static void main(String[] args) { // ... String query = "SELECT * FROM your-measurement"; QueryResult queryResult = influxDB.query(new Query(query)); // 处理查询结果 // ... } } ``` 2. 写入数据: ```java import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; import org.influxdb.dto.Point; import org.influxdb.dto.Query; import java.util.concurrent.TimeUnit; public class InfluxDBExample { public static void main(String[] args) { // ... String measurement = "your-measurement"; String fieldKey = "your-field"; String fieldValue = "your-value"; Point point = Point.measurement(measurement) .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS) .addField(fieldKey, fieldValue) .build(); influxDB.write(database, "", point); // 写入数据成功 } } ``` 以上示例代码中的`your-measurement`、`your-field`和`your-value`需要替换为你自己的实际数据。 希望这些示例代码能帮助你开始在Java中操作InfluxDB 1.7版本。如有任何进一步的问题,请随时向我提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值