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

相关文章
|
6月前
|
JSON NoSQL MongoDB
MongoDB【CRUD基本操作】
MongoDB【CRUD基本操作】
|
存储 JSON NoSQL
02 MongoDB - 基本操作
02 MongoDB - 基本操作
25 0
|
NoSQL 关系型数据库 MySQL
MongoDB 基本操作 增删改查
MongoDB 基本操作 增删改查
222 0
|
SQL JSON Ubuntu
Elasticsearch聚合学习之一:基本操作
Elasticsearch的聚合是常用的功能,此三部曲系列通过实战来熟悉和了解常用的聚合命令和参数
201 0
Elasticsearch聚合学习之一:基本操作
|
JSON NoSQL MongoDB
MongoDB基本操作(一)——简介、基本操作、增删改查
MongoDB基本操作(一)——简介、基本操作、增删改查
340 0
|
NoSQL 安全 MongoDB
MongoDB基本操作(四)——集群与安全
MongoDB基本操作(四)——集群与安全
142 0
|
存储 JSON 缓存
ElasticSearch 基本操作
本文讲解ElasticSearch的 基本操作
146 0
|
JSON NoSQL 数据处理
MongoDB 的基本操作|学习笔记
快速学习 MongoDB 的基本操作
|
JSON NoSQL Shell
搭建Mongo集群以及基本操作
本文介绍了mongo集群的搭建过程,以及mongo和副本集的基本命令。程序通过副本集连接mongo。
179 0
搭建Mongo集群以及基本操作
|
存储 关系型数据库 MySQL
180726-InfluxDB基本概念小结
InfluxDB作为时序数据库,与传统的关系型数据库相比而言,还是有一些区别的,下面尽量以简单明了的方式介绍下相关的术语概念
235 0
180726-InfluxDB基本概念小结