文档参考:

官网: 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 后面只能是timetags

(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;