• influxDB 变换类函数


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

    下面的例子六个观测值的water_level在表h2o_feet设置tag为 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

    例子1
    计算每秒钟的变化率
    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
    注意,derivative中的第一个字段值(0.00014)不是0.052(原始数据中前两个字段值之间的差异:2.116 - 2.604=0.052)。因为查询不指定单元的选择,InfluxDB自动计算每一秒的变化率,而不是每六分钟的变化率。导数列中第一个值的计算如下所示:(2.116 - 2.064) / (360s / 1s)
    分子是按字段值之间的差异。分母是以秒计的相关时间戳之间的差异(2015-08-18t00:06:00z - 2015-08-18t00:00:00z = 360s)除以单位(1s),从2015-08-18t00:00:00z率2015-08-18t00:06:00z返回
    每秒的变化率。

    例子2
    计算每六分钟的变化率

    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 / 12m)
    分子是按字段值之间的差异。分母是分钟相关的时间戳之间的差异(2015-08-18t00:06:00z - 2015-08-18t00:00:00z = 6m)除以单位(12m)。这将改变每12分钟从2015-08-18t00:00:00z率2015-08-18t00:06:00z。
    注:指定12m为单位并不意味着InfluxDB计算的数据每12分钟间隔的变化率。相反,InfluxDB计算每个区间的有效数据每12分钟变化率。
    例子3
    计算每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
    解释:
    为了得到这些结果,第一集InfluxDB计算区间指定组中的time()条款的时间max() water_level数据(12m)。这些结果看是这样
    name: h2o_feet
    --------------
    time			               max
    2015-08-18T00:00:00Z	 2.116
    2015-08-18T00:12:00Z	 2.126
    2015-08-18T00:24:00Z	 2.051

    其次,计算每12m InfluxDB变化率(相同的时间间隔作为集团的time()区间)在派生列得到的结果。导数列中第一个值的计算如下所示:(2.126 - 2.116) / (12m / 12m)

    分子是按字段值之间的差异。分母是分钟相关的时间戳之间的差异(2015-08-18t00:12:00z - 2015-08-18t00:00:00z=12m)除以单位(12m)。这个回报率每12分钟改变汇总数据从2015-08-18t00:00:00z到2015-08-18t00:12:00z。

    例子4
      将数据聚合到18分钟间隔,计算每六分钟的变化率。

    SELECT DERIVATIVE(SUM(water_level),6m) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time < '2015-08-18T00:36:00Z' GROUP BY time(18m)

    结果:

    name: h2o_feet
    --------------
    time			               derivative
    2015-08-18T00:18:00Z	 0.0033333333333332624

    解释:
    为了得到这些结果,第一集InfluxDB计算区间指定组中的time()条款的时间water_level的sum()数据(18m)。聚合结果如下所示
    name: h2o_feet
    --------------
    time			               sum
    2015-08-18T00:00:00Z	 6.208
    2015-08-18T00:18:00Z	 6.218

    其次,计算出每单位InfluxDB变化率(6m)在派生列得到的结果。导数列中第一个值的计算如下所示:(6.218 - 6.208) / (18m / 6m)
    分子是按字段值之间的差异。分母是分钟相关的时间戳之间的差异(2015-08-18t00:18:00z - 2015-08-18t00:00:00z = 18m)除以单位(6m)。这个返回的汇总数据2015-08-18t00:00:00z到2015-08-18t00:18:00z的每六分钟的变化率。

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

    下面的例子集中在2015-08-18t00:00:00z和2015-08-18t00:36:00z之间santa_monica现场water_level:

    > 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

    例子1
    计算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
    解释:
    差异列中的第一个值是2.116 - 2.064,差值列中的第二个值为2.028 - 2.116。
    请注意,小数点的额外位置是浮点数不准确的结果。因为数据类型都为float类型。
    例子2
    选择每12分钟间隔最小的water_level值计算这些值之间的差异:
    SELECT DIFFERENCE(MIN(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 difference 2015-08-18T00:12:00Z -0.03600000000000003 2015-08-18T00:24:00Z 0.0129999999999999 2015-08-18T00:36:00Z 0.026000000000000245
    解释:
    在不同列中得到值,InfluxDB首先选择min()值每隔12分钟:
    > SELECT MIN(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			 min
    2015-08-18T00:00:00Z  	2.064
    2015-08-18T00:12:00Z  	2.028
    2015-08-18T00:24:00Z  	2.041
    2015-08-18T00:36:00Z  	2.067

    然后使用这些值计算时间顺序值之间的差值;差值列中的第一个值是2.028 - 2.064。

    3、ELAPSED()函数

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

    单位可选项如下图:

    语法:

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

    例子1: 

    计算差值(纳秒)的领域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

    例子2
    在计算领域h2o_feet之间的时间间隔一分钟数:
    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

    4、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().

    下面的例子water_level在表 h2o_feet,location 为santa_monica,时间段2015 - 08 - 18 - t00:00:00z和2015 - 08 - 18 - t00:36:00z:

    > 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
    例子1:
    计算移动平均在每2字段值:

    SELECT MOVING_AVERAGE(water_level,2) 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			 moving_average
    2015-08-18T00:06:00Z	  2.09
    2015-08-18T00:12:00Z	  2.072
    2015-08-18T00:18:00Z	  2.077
    2015-08-18T00:24:00Z	  2.0835
    2015-08-18T00:30:00Z	  2.0460000000000003
    2015-08-18T00:36:00Z	  2.059

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

    例子2
    • 每隔12分钟选择最低值water_level和计算移动平均每2字段值:
    SELECT MOVING_AVERAGE(MIN(water_level),2) 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			                moving_average
    2015-08-18T00:12:00Z	  2.0460000000000003
    2015-08-18T00:24:00Z	  2.0345000000000004
    2015-08-18T00:36:00Z	  2.0540000000000003
    解释:
    这些结果,InfluxDB首先选择MIN() water_level每12分钟间隔:
    name: h2o_feet
    --------------
    time			   min
    2015-08-18T00:00:00Z	  2.064
    2015-08-18T00:12:00Z	  2.028
    2015-08-18T00:24:00Z	  2.041
    2015-08-18T00:36:00Z	  2.067
    然后使用这些值来计算移动平均在每2字段值,移动平均线列中的第一个结果的平均值2.064和2.028,第二个结果是2.028和2.041的平均水平。

    5、NON_NEGATIVE_DERIVATIVE()函数

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

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

    语法:

    SELECT NON_NEGATIVE_DERIVATIVE(<field_key>, [<unit>]) FROM <measurement_name> [WHERE <stuff>]
    其中unit取值可以为以下几个:

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

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

    然后计算时间字段值之间的差异,并将这些结果转换为每单位的变化率。
    单元参数是可选的,如果没有指定,默认为相同的时间间隔作为集团的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()只返回正数。

    6、STDDEV()函数

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

    语法:

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

    例子1
    计算表h20_feet 中字段water_level的标准偏差
    SELECT STDDEV(water_level) FROM h2o_feet
    结果:
    name: h2o_feet
    --------------
    time			               stddev
    1970-01-01T00:00:00Z	 2.279144584196145
    例子2
    计算water_level在一个星期时间间隔和location 标签,2015年9月18日的午夜2015年8月18日中午之间标准偏差。
    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

     

     
    
    
     
     


  • 相关阅读:
    Pandas 中对列 groupby 后进行 sum() 与 count() 区别及 agg() 的使用方法
    数据预处理 | python 第三方库 imblearn 处理样本分布不均衡问题
    数据预处理 | 使用 pandas.to_datetime 处理时间类型的数据
    CSS自定义文件上传按钮样式,兼容主流浏览器
    php实现计划任务
    windows环境下为php打开ssh2扩展
    vmware上linux连网(centos6.3、ubuntu14测试通过)
    如何实现打开网页自动弹出QQ对话框
    php输出最近N个月的起至时间戳
    内部div自动扩张剩余宽度(包含固定宽度div和自适应宽度div)
  • 原文地址:https://www.cnblogs.com/michellexiaoqi/p/7249766.html
Copyright © 2020-2023  润新知