欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

influxdb操作

程序员文章站 2022-05-07 14:21:19
...

增删改查

安装完之后,如何启动呢?

1

sudo service influxdb start

进入命令行

1

influx

1、InfluxDB数据库操作

  • 显示数据库

1

show databases

influxdb操作

  • 新建数据库

1

create database shhnwangjian

influxdb操作

  • 删除数据库

1

drop database shhnwangjian

influxdb操作

  • 使用指定数据库

1

use shhnwangjian

influxdb操作

 

2、InfluxDB数据表操作

在InfluxDB当中,并没有表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表。

  • 显示所有表

1

SHOW MEASUREMENTS

  • 新建表

InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。

1

insert disk_free,hostname=server01 value=442221834240i

其中 disk_free 就是表名,hostname是索引(tag),value=xx是记录值(field),记录值可以有多个,系统自带追加时间戳

influxdb操作

 

或者添加数据时,自己写入时间戳

1

insert disk_free,hostname=server01 value=442221834240i 1435362189575692182

influxdb操作

  • 删除表

1

drop measurement disk_free

  • 元数据查询

1

SHOW TAG KEYS FROM "measurement_name"
SHOW TAG VALUES FROM "measurement_name" WITH KEY = "tag_key"
  • 普通数据查询

1

SELECT value FROM "cpu_usage" WHERE host='server01' AND time > now() - 1h


 

特性

1、数据保存策略(Retention Policies)

influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。

  • 查看当前数据库Retention Policies

1

show retention policies on "db_name"

influxdb操作

  • 创建新的Retention Policies

1

create retention policy "rp_name" on "db_name" duration 3w replication 1 default

rp_name:策略名;

db_name:具体的数据库名;

3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期);

replication 1:副本个数,一般为1就可以了;

default:设置为默认策略

  • 修改Retention Policies

1

alter retention policy "rp_name" on "db_name" duration 30d default

  • 删除Retention Policies

1

drop retention policy "rp_name" on "db_name"

 

2、连续查询(Continuous Queries)

InfluxDB的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 SELECT 关键词和 GROUP BY time() 关键词。

InfluxDB会将查询结果放在指定的数据表中。

目的:使用连续查询是最优的降低采样率的方式,连续查询和存储策略搭配使用将会大大降低InfluxDB的系统占用量。而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便。

  • 新建连续查询

1

2

3

4

5

CREATE CONTINUOUS QUERY <cq_name> ON <database_name>

[RESAMPLE [EVERY <interval>] [FOR <interval>]]

BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement>

FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>]

END

 样例:

1

CREATE CONTINUOUS QUERY wj_30m ON shhnwangjian BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END

在shhnwangjian库中新建了一个名为 wj_30m 的连续查询,每三十分钟取一个connected_clients字段的平均值、中位值、最大值、最小值 redis_clients_30m 表中。使用的数据保留策略都是 default。

 

不同database样例:

1

CREATE CONTINUOUS QUERY wj_30m ON shhnwangjian_30 BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO shhnwangjian_30.autogen.redis_clients_30m FROM shhnwangjian.autogen.redis_clients GROUP BY ip,port,time(30m) END

 

  • 显示所有已存在的连续查询

1

SHOW CONTINUOUS QUERIES

influxdb操作

  • 删除Continuous Queries

1

DROP CONTINUOUS QUERY <cq_name> ON <database_name>

 

3、用户管理
可以直接在web管理页面做操作,也可以命令行。

1

#显示用户  
show users
#创建用户
create user "username" with password 'password'
#创建管理员权限用户create user "username" with password 'password' with all privileges
#删除用户
drop user "username"

 

 

常用函数

1、count()函数

返回一个(field)字段中的非空值的数量。

语法:

SELECT COUNT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

示例:

>SELECT COUNT(water_level) FROM h2o_feet
name: h2o_feet
--------------
time                           count
1970-01-01T00:00:00Z     15258

说明 water_level这个字段在 h2o_feet表*有15258条数据。

注意:InfluxDB中的函数如果没有指定时间的话,会默认以 epoch 0 (1970-01-01T00:00:00Z) 作为时间。

可以在where 中加入时间条件,如下:

> SELECT COUNT(water_level) FROM h2o_feet WHERE time >= '2015-08-18T00:00:00Z' AND time < '2015-09-18T17:00:00Z' GROUP BY time(4d)
name: h2o_feet
--------------
time                           count
2015-08-17T00:00:00Z     1440
2015-08-21T00:00:00Z     1920

这样结果中会包含时间结果。

2、DISTINCT()函数

返回一个字段(field)的唯一值。

语法:

SELECT DISTINCT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

使用示例

> SELECT DISTINCT("level description") FROM h2o_feet
name: h2o_feet
--------------
time                           distinct
1970-01-01T00:00:00Z     between 6 and 9 feet
1970-01-01T00:00:00Z     below 3 feet
1970-01-01T00:00:00Z     between 3 and 6 feet
1970-01-01T00:00:00Z     at or greater than 9 feet

这个例子显示level description这个字段共有四个值,然后将其显示了出来,时间为默认时间。

3、MEAN() 函数

返回一个字段(field)中的值的算术平均值(平均值)。字段类型必须是长整型或float64。

语法格式:

SELECT MEAN(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

使用示例

> SELECT MEAN(water_level) FROM h2o_feet
name: h2o_feet
--------------
time                           mean
1970-01-01T00:00:00Z     4.286791371454075

说明water_level字段的平均值为4.286791371454075

时间为默认时间,当然,你也可以加入where条件。

4、MEDIAN()函数

从单个字段(field)中的排序值返回中间值(中位数)。字段值的类型必须是长整型或float64格式。

语法:

SELECT MEDIAN(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

使用示例

> SELECT MEDIAN(water_level) from h2o_feet
name: h2o_feet
--------------
time                           median
1970-01-01T00:00:00Z     4.124

说明表中 water_level字段的中位数是 4.124

5、SPREAD()函数

返回字段的最小值和最大值之间的差值。数据的类型必须是长整型或float64。

语法:

SELECT SPREAD(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

使用示例

> SELECT SPREAD(water_level) FROM h2o_feet
name: h2o_feet
--------------
time                            spread
1970-01-01T00:00:00Z      10.574

6、SUM()函数

返回一个字段中的所有值的和。字段的类型必须是长整型或float64。

语法:

SELECT SUM(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

使用示例:

> SELECT SUM(water_level) FROM h2o_feet
name: h2o_feet
--------------
time                           sum
1970-01-01T00:00:00Z     67777.66900000002

此语句计算出了 h2o_feet表中 所有 water_level 字段的和。

7、TOP()函数

作用:返回一个字段中最大的N个值,字段类型必须是长整型或float64类型。

语法:

SELECT TOP( <field_key>[,<tag_key(s)>],<N> )[,<tag_key(s)>|<field_key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

使用示例

> SELECT TOP("water_level",3) FROM "h2o_feet"

name: h2o_feet
time                   top
----                   ---
2015-08-29T07:18:00Z   9.957
2015-08-29T07:24:00Z   9.964
2015-08-29T07:30:00Z   9.954

这个例子返回表中 water_level字段中最大的三个值。

8、BOTTOM()函数

作用:返回一个字段中最小的N个值。字段类型必须是长整型或float64类型。

语法:

SELECT BOTTOM(<field_key>[,<tag_keys>],<N>)[,<tag_keys>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

使用示例

> SELECT BOTTOM(water_level,3) FROM h2o_feet
name: h2o_feet
--------------
time                           bottom
2015-08-29T14:30:00Z     -0.61
2015-08-29T14:36:00Z     -0.591
2015-08-30T15:18:00Z     -0.594

这个例子返回表中 water_level字段中最小的三个值。

也可将关联tag放在一起查询,但如果tag值少于N的值,则返回的值的个数只会取tag中字段值少的那个。

如下所示:

> SELECT BOTTOM(water_level,location,3) FROM h2o_feet
name: h2o_feet
--------------
time                           bottom     location
2015-08-29T10:36:00Z     -0.243     santa_monica
2015-08-29T14:30:00Z     -0.61      coyote_creek

语句取最小的三个值,然而结果只返回了2个值,因为 location 这个tag只有 两个取值。

9、FIRST()函数

作用:返回一个字段中最老的取值。

语法:

SELECT FIRST(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

示例:

> SELECT FIRST(water_level) FROM h2o_feet WHERE location = 'santa_monica'
name: h2o_feet
--------------
time                           first
2015-08-18T00:00:00Z     2.064

这个语句返回了 在 location为santa_monica条件下,最旧的那个water_level字段的取值和时间。

10、LAST()函数

作用:返回一个字段中最新的取值。

语法:

SELECT LAST(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

示例:

> SELECT LAST(water_level),location FROM h2o_feet WHERE time >= '2015-08-18T00:42:00Z' and time <= '2015-08-18T00:54:00Z'
name: h2o_feet
--------------
time                           last      location
2015-08-18T00:54:00Z     6.982     coyote_creek

11、MAX()函数

作用:返回一个字段中的最大值。该字段类型必须是长整型,float64,或布尔类型。

语法:

SELECT MAX(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

示例:

> SELECT MAX(water_level),location FROM h2o_feet
name: h2o_feet
--------------
time                           max       location
2015-08-29T07:24:00Z     9.964     coyote_creek

12、MIN()函数

作用:返回一个字段中的最小值。该字段类型必须是长整型,float64,或布尔类型。

语法:

SELECT MIN(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

示例:

> SELECT MIN(water_level),location FROM h2o_feet
name: h2o_feet
--------------
time                          min       location
2015-08-29T14:30:00Z    -0.61     coyote_creek

13、PERCENTILE()函数

作用:返回排序值排位为N的百分值。字段的类型必须是长整型或float64。

百分值是介于100到0之间的整数或浮点数,包括100。

语法:

SELECT PERCENTILE(<field_key>, <N>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

示例:

> SELECT PERCENTILE(water_level,5),location FROM h2o_feet
name: h2o_feet
--------------
time                      percentile     location
2015-08-28T12:06:00Z      1.122             santa_monica

 

14、DERIVATIVE()函数

作用:返回一个字段在一个series中的变化率。

InfluxDB会计算按照时间进行排序的字段值之间的差异,并将这些结果转化为单位变化率。其中,单位可以指定,默认为1s。

语法:

SELECT DERIVATIVE(<field_key>, [<unit>]) FROM <measurement_name> [WHERE <stuff>]

其中,unit取值可以为以下几种:

u --microseconds
s --seconds
m --minutes
h --hours
d --days
w --weeks

DERIVATIVE()函数还可以在GROUP BY time()的条件下与聚合函数嵌套使用,格式如下:

SELECT DERIVATIVE(AGGREGATION_FUNCTION(<field_key>),[<unit>]) FROM <measurement_name> WHERE <stuff> GROUP BY time(<aggregation_interval>)

示例:

假设location = santa_monica 条件下数据有以下几条:

name: h2o_feet
--------------
time                           water_level
2015-08-18T00:00:00Z     2.064
2015-08-18T00:06:00Z     2.116
2015-08-18T00:12:00Z     2.028
2015-08-18T00:18:00Z     2.126
2015-08-18T00:24:00Z     2.041
2015-08-18T00:30:00Z     2.051

计算每一秒的变化率:

> SELECT DERIVATIVE(water_level) FROM h2o_feet WHERE location = 'santa_monica' LIMIT 5
name: h2o_feet
--------------
time                           derivative
2015-08-18T00:06:00Z     0.00014444444444444457
2015-08-18T00:12:00Z     -0.00024444444444444465
2015-08-18T00:18:00Z     0.0002722222222222218
2015-08-18T00:24:00Z     -0.000236111111111111
2015-08-18T00:30:00Z     2.777777777777842e-05

第一行数据的计算公式为(2.116 - 2.064) / (360s / 1s)

计算每六分钟的变化率

> SELECT DERIVATIVE(water_level,6m) FROM h2o_feet WHERE location = 'santa_monica' LIMIT 5
name: h2o_feet
--------------
time                           derivative
2015-08-18T00:06:00Z     0.052000000000000046
2015-08-18T00:12:00Z     -0.08800000000000008
2015-08-18T00:18:00Z     0.09799999999999986
2015-08-18T00:24:00Z     -0.08499999999999996
2015-08-18T00:30:00Z     0.010000000000000231

第一行数据的计算过程如下:(2.116 - 2.064) / (6m / 6m)

计算每12分钟的变化率:

> SELECT DERIVATIVE(water_level,12m) FROM h2o_feet WHERE location = 'santa_monica' LIMIT 5
name: h2o_feet
--------------
time                           derivative
2015-08-18T00:06:00Z     0.10400000000000009
2015-08-18T00:12:00Z     -0.17600000000000016
2015-08-18T00:18:00Z     0.19599999999999973
2015-08-18T00:24:00Z     -0.16999999999999993
2015-08-18T00:30:00Z     0.020000000000000462

第一行数据计算过程为:(2.116 - 2.064 / (6m / 12m)

计算每12分钟最大值的变化率

> SELECT DERIVATIVE(MAX(water_level)) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time < '2015-08-18T00:36:00Z' GROUP BY time(12m)
name: h2o_feet
--------------
time                           derivative
2015-08-18T00:12:00Z     0.009999999999999787
2015-08-18T00:24:00Z     -0.07499999999999973

这个函数功能非常多,也非常复杂,更多对于此功能的详细解释请看官网:https://docs.influxdata.com/influxdb/v0.13/query_language/functions/#derivative

15、DIFFERENCE()函数

作用:返回一个字段中连续的时间值之间的差异。字段类型必须是长整型或float64。

最基本的语法:

SELECT DIFFERENCE(<field_key>) FROM <measurement_name> [WHERE <stuff>]

与GROUP BY time()以及其他嵌套函数一起使用的语法格式:

SELECT DIFFERENCE(<function>(<field_key>)) FROM <measurement_name> WHERE <stuff> GROUP BY time(<time_interval>)

其中,函数可以包含以下几个:

COUNT()MEAN()MEDIAN(),SUM()FIRST()LAST()MIN()MAX(), 和 PERCENTILE()。

使用示例

例子中使用的源数据如下所示:

> SELECT water_level FROM h2o_feet WHERE location='santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:36:00Z'
name: h2o_feet
--------------
time                            water_level
2015-08-18T00:00:00Z      2.064
2015-08-18T00:06:00Z      2.116
2015-08-18T00:12:00Z      2.028
2015-08-18T00:18:00Z      2.126
2015-08-18T00:24:00Z      2.041
2015-08-18T00:30:00Z      2.051
2015-08-18T00:36:00Z      2.067

计算water_level间的差异:

> SELECT DIFFERENCE(water_level) FROM h2o_feet WHERE location='santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:36:00Z'
name: h2o_feet
--------------
time                            difference
2015-08-18T00:06:00Z      0.052000000000000046
2015-08-18T00:12:00Z      -0.08800000000000008
2015-08-18T00:18:00Z      0.09799999999999986
2015-08-18T00:24:00Z      -0.08499999999999996
2015-08-18T00:30:00Z      0.010000000000000231
2015-08-18T00:36:00Z      0.016000000000000014

数据类型都为float类型。

16、ELAPSED()函数

作用:返回一个字段在连续的时间间隔间的差异,间隔单位可选,默认为1纳秒。

单位可选项如下图:

influxdb操作

语法:

SELECT ELAPSED(<field_key>, <unit>) FROM <measurement_name> [WHERE <stuff>]

示例:

计算h2o_feet字段在纳秒间隔下的差异。

> SELECT ELAPSED(water_level) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:24:00Z'
name: h2o_feet
--------------
time                            elapsed
2015-08-18T00:06:00Z      360000000000
2015-08-18T00:12:00Z      360000000000
2015-08-18T00:18:00Z      360000000000
2015-08-18T00:24:00Z      360000000000

在一分钟间隔下的差异率:

> SELECT ELAPSED(water_level,1m) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:24:00Z'
name: h2o_feet
--------------
time                            elapsed
2015-08-18T00:06:00Z      6
2015-08-18T00:12:00Z      6
2015-08-18T00:18:00Z      6
2015-08-18T00:24:00Z      6

注意:如果设置的时间间隔比字段数据间的时间间隔更大时,则函数会返回0,如下所示:

> SELECT ELAPSED(water_level,1h) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:24:00Z'
name: h2o_feet
--------------
time                            elapsed
2015-08-18T00:06:00Z      0
2015-08-18T00:12:00Z      0
2015-08-18T00:18:00Z      0
2015-08-18T00:24:00Z      0

17、MOVING_AVERAGE()函数

作用:返回一个连续字段值的移动平均值,字段类型必须是长整形或者float64类型。

语法:

基本语法

SELECT MOVING_AVERAGE(<field_key>,<window>) FROM <measurement_name> [WHERE <stuff>]

与其他函数和GROUP BY time()语句一起使用时的语法

SELECT MOVING_AVERAGE(<function>(<field_key>),<window>) FROM <measurement_name> WHERE <stuff> GROUP BY time(<time_interval>)

此函数可以和以下函数一起使用:

COUNT()MEAN(),MEDIAN()SUM()FIRST()LAST()MIN()MAX(), and PERCENTILE().

示例:

> SELECT water_level FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:36:00Z'
name: h2o_feet
--------------
time                            water_level
2015-08-18T00:00:00Z      2.064
2015-08-18T00:06:00Z      2.116
2015-08-18T00:12:00Z      2.028
2015-08-18T00:18:00Z      2.126
2015-08-18T00:24:00Z      2.041
2015-08-18T00:30:00Z      2.051
2015-08-18T00:36:00Z      2.067

18、NON_NEGATIVE_DERIVATIVE()函数

作用:返回在一个series中的一个字段中值的变化的非负速率。

语法:

SELECT NON_NEGATIVE_DERIVATIVE(<field_key>, [<unit>]) FROM <measurement_name> [WHERE <stuff>]

其中unit取值可以为以下几个:

influxdb操作

与聚合类函数放在一起使用时的语法如下所示:

SELECT NON_NEGATIVE_DERIVATIVE(AGGREGATION_FUNCTION(<field_key>),[<unit>]) FROM <measurement_name> WHERE <stuff> GROUP BY time(<aggregation_interval>)

此函数示例请参阅:DERIVATIVE()函数

19、STDDEV()函数

作用:返回一个字段中的值的标准偏差。值的类型必须是长整型或float64类型。

语法:

SELECT STDDEV(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

示例:

> SELECT STDDEV(water_level) FROM h2o_feet
name: h2o_feet
--------------
time                           stddev
1970-01-01T00:00:00Z     2.279144584196145

示例2:

> SELECT STDDEV(water_level) FROM h2o_feet WHERE time >= '2015-08-18T00:00:00Z' and time < '2015-09-18T12:06:00Z' GROUP BY time(1w), location
name: h2o_feet
tags: location = coyote_creek
time                           stddev
----                           ------
2015-08-13T00:00:00Z     2.2437263080193985
2015-08-20T00:00:00Z     2.121276150144719
2015-08-27T00:00:00Z     3.0416122170786215
2015-09-03T00:00:00Z     2.5348065025435207
2015-09-10T00:00:00Z     2.584003954882673
2015-09-17T00:00:00Z     2.2587514836274414

name: h2o_feet
tags: location = santa_monica
time                           stddev
----                           ------
2015-08-13T00:00:00Z     1.11156344587553
2015-08-20T00:00:00Z     1.0909849279082366
2015-08-27T00:00:00Z     1.9870116180096962
2015-09-03T00:00:00Z     1.3516778450902067
2015-09-10T00:00:00Z     1.4960573811500588
2015-09-17T00:00:00Z     1.075701669442093