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

相关文章
|
存储 NoSQL 关系型数据库
InfluxDB 通识篇
InfluxDB 通识篇
1755 0
|
数据可视化 安全 网络安全
Window下安装并使用InfluxDB可视化工具 —— InfluxDBStudio
Window下安装并使用InfluxDB可视化工具 —— InfluxDBStudio
4057 0
Window下安装并使用InfluxDB可视化工具 —— InfluxDBStudio
|
5月前
|
存储 监控 关系型数据库
InfluxDB 时序数据的高效解决方案
InfluxDB 是一种专为时间序列数据优化的开源数据库,支持高效存储、检索和分析大量时序数据。它采用 Tag-Key-Value 模型,提供高性能写入与查询能力,适合监控系统、物联网设备数据及实时分析等场景。相比传统关系型数据库(如 MySQL),InfluxDB 针对时序数据进行了架构优化,具备无模式设计、自动数据管理及灵活扩展性等优势。本文通过 Go 语言代码实战展示了如何连接、写入和查询 InfluxDB 数据,并介绍了其核心概念与应用场景,助力开发者快速上手时序数据库开发。
1018 0
InfluxDB 时序数据的高效解决方案
|
存储 数据采集 Java
InfluxDB 的学习笔记
在Java项目中实现InfluxDB的落地应用,主要包括添加InfluxDB的Java客户端依赖、创建数据库连接、执行数据的增删改查操作等步骤
726 2
|
SQL 时序数据库
influxdb 进行数据删除和修改
influxdb 进行数据删除和修改
2582 5
|
存储 传感器 数据采集
influxDB使用客户端教程
influxDB使用客户端教程
1721 0
|
存储 数据处理 数据库
InfluxDB数据之谜:如何巧妙地删除和修改你的时间序列数据?
【8月更文挑战第20天】InfluxDB是一款高性能时间序列数据库,专为快速存储与检索时间序列数据设计。本文通过Python示例介绍如何在InfluxDB中执行数据删除与间接修改操作。首先安装`influxdb`库,接着连接数据库。使用`DELETE`语句可按条件删除数据;因InfluxDB不直接支持数据修改,可通过查询、更新并重写数据的方式来实现。注意这种方式可能影响性能,需谨慎使用。随着社区发展,未来将提供更多高效的数据管理工具。
1205 1
|
存储 数据库 时序数据库
influxdb得导出与导入
influxdb得导出与导入
719 1
|
SQL 存储 关系型数据库
influxdb常用sql总结
influxdb常用sql总结
966 1
|
存储 传感器 SQL
influxdb 中得 fields 与 tag 区别总结
influxdb 中得 fields 与 tag 区别总结
1171 1