文档参考:
官网: Influx Query Language (InfluxQL) reference | InfluxDB OSS 1.8 Documentation
InfluxDB和传统Mysql的对比
库、表等比较:
influxDB | 传统数据库中的概念 |
database | 数据库 |
measurement | 数据库中的表 |
points | 表里面的一行数据 |
influxdb数据的构成:
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point属性 | 传统数据库中的概念 |
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
fields | 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度 |
tags | 各种有索引的属性:地区,海拔 |
point
由3部分组成 time+fields+tags,
fields和tags key名称严格区分大小写。
point的属性 | 备注 |
time | 每行记录都有一列time,主索引,记录时间戳,单位纳秒,时区UTC(东八区减8小时) |
fields | 普通列,key-value结构,value数据类型支持型(float、integer、string、boolean) |
tags | 索引列,key-value结构,value数据类型只支持string |
fields数据类型注意:
类型 | 备注 |
float | influxdb的fields默认是float浮点型 |
integer | 整型,insert语句如需写入field是整型,需在数值后面加个i |
string | 字符串,insert语句如需写入field是字符串,需英文双引号包含数值 |
boolean | 布尔型,真可以用 t , T , true , True , TRUE表示;假可以用 f , F , false , False 或者 FALSE表示 |
一般情况下,经常作为查询条件的列,在初始时设置为tag,即索引,fields不常作为查询条件,更甚者,在复杂查询语法中,聚合语句group by
后面只能是time
和tags
。
(4)登录
$influx -h
$influx
Connected to http://localhost:8086 version 1.8.0
InfluxDB shell version: 1.8.0
>
(5) 用户创建 相关
> CREATE USER knight WITH PASSWORD 'knight' WITH ALL PRIVILEGES
> show users
user admin
---- -----
knight true
>
(5.1)权限管理
# 创建用户
create user xxx with password 'pwd'
# 重设密码
set password for xxx='newpwd'
# 删除用户
drop user xxx
# 删除库
drop database db_hw_ces
# 给所有用户权限
GRANT ALL PRIVILEGES TO <username>
# 给库的权限
GRANT [READ,WRITE,ALL] privileges ON <database_name> TO <username>
GRANT all privileges ON db_hw_ces TO devops_rw
##
GRANT READ ON tsdb_tbox_dev TO hwy_tbox_rw
GRANT WRITE ON tsdb_tbox_dev TO hwy_tbox_rw
# 权限回收
REVOKE ALL PRIVILEGES FROM <username>
REVOKE [READ,WRITE,ALL] ON <database_name> FROM <username>
# 查询权限
show grants for <username>
(5.2)创建数据库
> create database test
> show databases
name: databases
name
----
_internal
test
>
## 删除表的内容
delete from cpu_load_short
(5.3)简单操作
> select * from "cpu"
name: cpu
time host load usage
---- ---- ---- -----
1590650673865802321 me02 0.1 0.2
> select "host","load" from "cpu"
name: cpu
time host load
---- ---- ----
1590650673865802321 me02 0.1
> select * from "cpu" where "host"='me02'
name: cpu
time host load usage
---- ---- ---- -----
1590650673865802321 me02 0.1 0.2
(6)HTTP API
# 创建数据库
curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE test01"
## 写入数据
### 写入单条数据
curl -i -XPOST http://localhost:8086/write?db=test01 --data-binary "cpu,host=me03 load=0.1,usage=0.33"
### 写入多条数据
curl -i -XPOST http://localhost:8086/write?db=test01 --data-binary "cpu,host=me03 load=0.1,usage=0.22 166"
## 查询数据
curl -G http://localhost:8086/query?db=test01 --data-urlencode "q=SELECT * FROM \"cpu\""
InfluxQL 语法
InfluxDB里存储的数据被称为时间序列数据,InfluxDB存储方式跟传统关系型数据库不同的是:
传统关系型数据库通过数据库+表+字段组织数据,InfluxDB通过指标、标签、字段组织数据,时间戳是默认的索引列,标签跟字段其实就相当于关系型数据库中的字段,只不过标签会被索引,而字段不会。
另外,InfluxDB中的表(measurement)、字段(tag、field)不用事先创建,并且不存储null值
DDL语句
# 本文博客地址:
# 查看所有的数据库
show databases;
# 使用特定的数据库
use database_name;
# 查看所有的measurement(表)
show measurements;
## 删除measurement(表)
drop measurement mem_short
# 数据中的时间字段默认显示的是一个纳秒时间戳,改成可读格式
precision rfc3339; -- 之后再查询,时间就是rfc3339标准格式
# 或可以在连接数据库的时候,直接带该参数
influx -precision rfc3339
# 查看一个measurement中所有的tag key
show tag keys
# 查看一个measurement中所有的field key
show field keys
# 查看一个measurement中所有的保存策略(可以有多个,一个标识为default)
show retention policies;
DML语句
查询
基本查询语法如下:
SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]
上面的语法中,划分了select和from两块
select语句
- select * : 表示查询所有的field和tag对应的值
- select field_key: 表示查询特定的field对应的值
- select tag_key: 表示查询的特定的tag对应的值
- SELECT "<field_key>"::field,"<tag_key>"::tag: 注意::field和::tag用来限定这个数据的类型为tag或者是field
from语句
- from后面需要接上measurement,表示从这个mesaurement中查询数据
- FROM <measurement_name> 从指定的measurement中获取数据
- FROM <measurement_name>,<measurement_name> 从多个measurement中获取数据
- FROM <database_name>.<retention_policy_name>.<measurement_name> 从某个数据库中某个保留策略中查询measurement中的数据
示例:
> select age from xxyy;
name: yhh
time age
---- ---
1563889538654374538 26
1563889547738266214 30
1563889704754695002 30
1563889723440000821 30
> select "age"::field, "name"::tag from xxyy;
name: xx
time age name
---- --- ----
1563889538654374538 26 一xx
1563889547738266214 30 一xx
1563889704754695002 30 一xx2
1563889723440000821 30 一xx3
# 在某个库下查相似的表
show measurements on example with measurement=~ /cpu*/
# 查询10条数据
select * from measurement_name limit 10;