InfluxDB基本操作

简介: 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 的效果,可以使用正则表达式的方式。

相关文章
|
3月前
|
存储 数据采集 Java
InfluxDB 的学习笔记
在Java项目中实现InfluxDB的落地应用,主要包括添加InfluxDB的Java客户端依赖、创建数据库连接、执行数据的增删改查操作等步骤
98 2
|
7月前
|
存储 监控 物联网
InfluxDB简介与场景
InfluxDB简介与场景
122 1
|
7月前
|
SQL 关系型数据库 数据库
InfluxDB相关概念
InfluxDB相关概念
72 0
|
消息中间件 监控 数据可视化
【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例
influxDB的官网下载地址 https://portal.influxdata.com/downloads/打开以后,如下图所示,可以选择版本号,以及平台。此处咱们选择windows平台。不过此处没有实际的可以下载的地方,着实比较过分,不过咱们可以另辟蹊径。
1201 0
【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例
|
存储 JSON NoSQL
02 MongoDB - 基本操作
02 MongoDB - 基本操作
30 0
|
SQL 关系型数据库 MySQL
mysql数据库中对数据的基本操作(一)
mysql数据库中对数据的基本操作
mysql数据库中对数据的基本操作(一)
|
关系型数据库 MySQL 数据库
mysql数据库中对数据的基本操作(二)
mysql数据库中对数据的基本操作(二)
mysql数据库中对数据的基本操作(二)
|
SQL JSON Ubuntu
Elasticsearch聚合学习之一:基本操作
Elasticsearch的聚合是常用的功能,此三部曲系列通过实战来熟悉和了解常用的聚合命令和参数
204 0
Elasticsearch聚合学习之一:基本操作
|
JSON NoSQL MongoDB
MongoDB基本操作(一)——简介、基本操作、增删改查
MongoDB基本操作(一)——简介、基本操作、增删改查
366 0
|
存储 JSON 缓存
ElasticSearch 基本操作
本文讲解ElasticSearch的 基本操作
151 0