文章目录

  • 聚合类函数
  • count () 函数
  • distinct () 函数
  • mean() 函数
  • median() 函数
  • spread() 函数
  • sum() 函数
  • 选择类函数
  • top () 函数
  • bottom() 函数
  • first() 函数
  • last() 函数
  • max() 函数
  • min() 函数
  • percentile() 函数
  • 变换类函数
  • derivative() 函数
  • difference () 函数
  • elapsed() 函数
  • moving_average() 函数
  • non_negative_derivative() 函数
  • stddev() 函数


聚合类函数

count () 函数

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

语法:

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

实例:

select count("pH") from h2o_pH

prometheus使用influxdb内的数据 influxdb mean函数_整型


说明 pH 这个字段在 h2o_pH 表中共有 15258 条数据

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

select count("pH") from h2o_pH where time >='2019-08-17T00:00:00Z' AND time < '2019-09-17T17:00:00Z' GROUP BY time(4d)

prometheus使用influxdb内的数据 influxdb mean函数_数据库_02

distinct () 函数

返回一个字段的唯一值

语法:

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

示例:

select distinct("level description") from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_数据库_03

mean() 函数

返回一个字段中的值得平均值。这些字段必须是长整型或 float 类型

语法:

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

示例:

select mean("water_level") from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_数据库_04

median() 函数

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

语法:

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

示例:

select median("water_level") from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_整型_05

spread() 函数

返回字段值得最小值与最大值之间的差值。字段值的类型必须是长整型或 float 类型

语法:

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

示例:

select spread("water_level") from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_字段_06

sum() 函数

返回字段中所有值总和。字段值的类型必须是长整型或 float 类型

语法:

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

示例:

select sum("water_level") from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_字段_07

选择类函数

top () 函数

返回一个字段中最大的 N 个值,字段必须是长整型或 float 类型

语法:

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

prometheus使用influxdb内的数据 influxdb mean函数_数据库_08

bottom() 函数

返回一个字段中最小的 N 个值,字段必须是长整型或 float 类型

语法:

SELECT BUTTOM( <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 bottom("water_level",3) from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_字段_09


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

select bottom("water_level","location",3) from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_字段_10


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

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'

prometheus使用influxdb内的数据 influxdb mean函数_类函数_11

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 >= '2019-08-17T00:42:00Z' and time <= '2019-09-17T00:54:00Z'

prometheus使用influxdb内的数据 influxdb mean函数_字段_12

max() 函数

返回一个字段中最大的值,字段必须是长整型或 float 类型

语法:

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

示例:

select MAX("water_level"),location from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_字段_13

min() 函数

返回一个字段中最小的值,字段必须是长整型或 float 类型

语法:

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

示例:

select min("water_level"),location from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_整型_14

percentile() 函数

返回排序值排位为N的百分值,字段必须是长整型或 float 类型

百分值是介于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

prometheus使用influxdb内的数据 influxdb mean函数_字段_15


就是将water_level字段按照不同的location求百分比,然后取第五位数据。

变换类函数

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>)

示例:

部分数据:

prometheus使用influxdb内的数据 influxdb mean函数_字段_16

select derivative("water_level")from h2o_feet where location='santa_monica' limit 5

prometheus使用influxdb内的数据 influxdb mean函数_整型_17


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

计算每 6 分钟的变化率

select derivative("water_level",6m)from h2o_feet where location='santa_monica' limit 5

prometheus使用influxdb内的数据 influxdb mean函数_类函数_18


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

计算每12分钟的变化率:

select derivative("water_level",12m)from h2o_feet where location='santa_monica' limit 5

prometheus使用influxdb内的数据 influxdb mean函数_字段_19


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

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

SELECT derivative(MAX(water_level)) FROM h2o_feet WHERE location='santa_monica' AND time >= '2019-08-17T00:00:00Z' AND time < '2019-08-18T00:36:00Z' GROUP BY time(12m)

prometheus使用influxdb内的数据 influxdb mean函数_数据库_20

difference () 函数

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

语法:

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()。

示例:

示例中使用的源数据

prometheus使用influxdb内的数据 influxdb mean函数_字段_21

计算water_level间的差异:

select difference(water_level) from h2o_feet where location='santa_monica' and time >= '2019-08-17T00:00:00Z' AND time < '2019-08-17T00:36:00Z'

prometheus使用influxdb内的数据 influxdb mean函数_类函数_22

elapsed() 函数

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

语法:

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 >= '2019-08-17T00:00:00Z' and time < '2019-08-17T00:24:00Z'

prometheus使用influxdb内的数据 influxdb mean函数_数据库_23


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

select elapsed(water_level,1m) from h2o_feet where location='santa_monica' and time >= '2019-08-17T00:00:00Z' and time < '2019-08-17T00:24:00Z'

prometheus使用influxdb内的数据 influxdb mean函数_整型_24


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

prometheus使用influxdb内的数据 influxdb mean函数_类函数_25

moving_average() 函数

返回一个连续字段值的移动平均值,字段类型必须是长整型或者 float 类型

语法:

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 >= '2019-08-17T00:00:00Z' and time < '2019-08-17T00:36:00Z'

prometheus使用influxdb内的数据 influxdb mean函数_整型_26


计算平均移动在每两个字段

select moving_average(water_level,2) from h2o_feet where location='santa_monica' and time >= '2019-08-17T00:00:00Z' and time < '2019-08-17T00:36:00Z'

prometheus使用influxdb内的数据 influxdb mean函数_整型_27

移动平均线列中的第一个值的平均值是2.064和2.116,第二个移动平均线列中的值是2.116和2.028的平均水平。

每隔12分钟选择最低值water_level和计算移动平均每2字段值:

select moving_average(min(water_level),2) from h2o_feet where location='santa_monica' and time >= '2019-08-17T00:00:00Z' and time < '2019-08-17T00:36:00Z' order by time(12m)

prometheus使用influxdb内的数据 influxdb mean函数_整型_28

这些结果,InfluxDB首先选择MIN() water_level每12分钟间隔:

non_negative_derivative() 函数

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

语法:

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

InfluxDB计算连续字段值之间的差异和转换的结果为每单位变化率。
单位参数是可选的,如果没有指定,则默认为1秒(1s)。

non_negative_derivative()也可以与嵌套函数a GROUP BY time()一起使用。

查询包含这些选项,InfluxDB首先进行聚合,选择,或转型通过时间间隔函数group by time()。

然后计算时间字段值之间的差异,并将这些结果转换为每单位的变化率。

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

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

可以参考derivative()的查询例子。derivative()和non_negative_derivative所有的查询结果是相同的除了non_negative_derivative()只返回正数。

stddev() 函数

返回一个字段中的值的标准偏差。字段类型必须是长整型或者 float 类型

语法:

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

示例:

select stddev(water_level) from h2o_feet

prometheus使用influxdb内的数据 influxdb mean函数_类函数_29


计算water_level在一个星期时间间隔和location 标签,2019年8月18日的午夜2019年9月18日中午之间标准偏差。

SELECT STDDEV(water_level) FROM h2o_feet WHERE time >= '2019-08-17T00:00:00Z' and time < '2019-09-18T12:06:00Z' GROUP BY time(1w), location

prometheus使用influxdb内的数据 influxdb mean函数_数据库_30