the group clause

group by 返回的分组结果是根据用户指定的tag ,time interval。

1、group by tags

2、group by time intervals

group by time()分组查询返回用户指定时间间隔结果

语法:

SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(<time_interval>),[tag_key] [fill(<fill_option>)]

Description of basic syntax

group by time()查询需要一个influxql功能在SELECT子句和WHERE子句中的一个时间范围。注意,group by子句必须位于WHERE子句之后。

time(time_interval)

group by time()的time_interval中time()是一个持续的文字。它决定了随着时间的推移influxdb分组的查询结果。例如,在WHERE子句中指定的时间范围内,一个time_interval设置5m,查询结果为5分钟的时间分组。

fill(<fill_option>)

fill(< fill_option >)是可选的。它更改没有数据的时间间隔报告的值。下面GROUP BY time intervals and fill() 更多信息。

coverage:

Group BY time()查询依赖于时间间隔和infuxDB的预设的时间边界,以确定每个时间间隔内包含的原始数据和查询返回的时间戳。

例子

下面的例子使用下面的示例数据样本:

> SELECT "water_level","location" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'

name: h2o_feet
--------------
time water_level location
2015-08-18T00:00:00Z 8.12 coyote_creek
2015-08-18T00:00:00Z 2.064 santa_monica
2015-08-18T00:06:00Z 8.005 coyote_creek
2015-08-18T00:06:00Z 2.116 santa_monica
2015-08-18T00:12:00Z 7.887 coyote_creek
2015-08-18T00:12:00Z 2.028 santa_monica
2015-08-18T00:18:00Z 7.762 coyote_creek
2015-08-18T00:18:00Z 2.126 santa_monica
2015-08-18T00:24:00Z 7.635 coyote_creek
2015-08-18T00:24:00Z 2.041 santa_monica
2015-08-18T00:30:00Z 7.5 coyote_creek
2015-08-18T00:30:00Z 2.051 santa_monica

例子1

查询以12分钟间隔的结果

> SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)

name: h2o_feet
--------------
time count
2015-08-18T00:00:00Z 2
2015-08-18T00:12:00Z 2
2015-08-18T00:24:00Z 2

解释:

查询使用influxql函数计算water_level点数量与标签的location= coyote_creek设置组结果为12分钟。
每个时间戳的结果代表一个单独的12分钟间隔。对于第一个时间戳计算覆盖2015-08-18t00:00:00z到2015-08-18t00:12:00z原始数据,便不包括2015-08-18t00:12:00z。第二时间计数包括2015-08-18t00:12:00z与2015-08-18t00:24:00z原始数据,但不包括2015-08-18t00:24:00z。

例子2 :查询以12分钟的时间间隔和tag分组。

> SELECT COUNT("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m),"location"

name: h2o_feet
tags: location=coyote_creek
time count
---- -----
2015-08-18T00:00:00Z 2
2015-08-18T00:12:00Z 2
2015-08-18T00:24:00Z 2 name: h2o_feet
tags: location=santa_monica
time count
---- -----
2015-08-18T00:00:00Z 2
2015-08-18T00:12:00Z 2
2015-08-18T00:24:00Z 2

解释:

查询使用influxql函数计算water_level点数。设置标签tag locationt 和间隔为12分钟产生分组结果。注意,时间间隔和标记键在组子句中用逗号分隔。
查询返回两个结果序列:一个用于location标记的每个标记值。每个时间戳的结果代表一个单独的12分钟间隔。对于第一个时间戳计算覆盖2015-08-18t00:00:00z以上原始数据,但不包括2015-08-18t00:12:00z。第二时间计数包括2015-08-18t00:12:00z以上的原始数据,但不包括2015-08-18t00:24:00z。

基本语法的常见问题:

问题1:在查询结果中意外的时间戳和值

与基本语法,InfluxDB依赖group by time()间隔对系统预设的时间界限来确定原始数据包含在每个时间间隔和查询返回的时间戳。在某些情况下,这可能导致意想不到的结果。

例子

原始数据

> SELECT "water_level" FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:18:00Z'
name: h2o_feet
--------------
time water_level
2015-08-18T00:00:00Z 8.12
2015-08-18T00:06:00Z 8.005
2015-08-18T00:12:00Z 7.887
2015-08-18T00:18:00Z 7.762

查询和结果:
下面的查询覆盖12分钟的时间范围,组结果分成12分钟的时间间隔,但返回两个结果:

> SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time < '2015-08-18T00:18:00Z' GROUP BY time(12m)

name: h2o_feet
time count
---- -----
2015-08-18T00:00:00Z 1 <----- Note that this timestamp occurs before the start of the query's time range
2015-08-18T00:12:00Z 1

说明

InfluxDB使用预设时间间隔(GROUP BY intervals )时间界限是独立的在WHERE子句中不依赖于任何时间条件。当计算结果时,所有返回的数据必须出现在查询的显式时间范围内,但按组间隔将基于预先设置的时间边界。

下表显示了预设的时间边界,group by time()相关组分包括,和返回的时间戳为每个组的结果time()区间。

Time Interval Number Preset Time Boundary(预定时间边界) GROUP BY time() Interval Points Included Returned Timestamp
1 time >= 2015-08-18T00:00:00Z AND time < 2015-08-18T00:12:00Z time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:12:00Z 8.005 2015-08-18T00:00:00Z
2 time >= 2015-08-12T00:12:00Z AND time < 2015-08-18T00:24:00Z time >= 2015-08-12T00:12:00Z AND time < 2015-08-18T00:18:00Z 7.887 2015-08-18T00:12:00Z

第一预设12分钟的时间开始00:00和结束的边界就在00:12。只有一个原始点(8.005)在查询的第一个预设时间组中和第一个时间边界内都发生了下降。注意,返回的时间戳发生在查询时间范围开始之前,查询结果排除了查询时间范围内之前发生的数据。

第二预设12分钟的时间开始和结束的边界00:12之前00:24。在第二个预先时间边界只有一个原点(7.887)下跌查询的第二group by time()区间

advanced GROUP BY time() syntax允许用户改变InfluxDB预设的时间界限的开始时间。

例子3

在高级语法部分中,继续使用这里所示的查询;它将预先设定的时间边界向前移动了6分钟,这样的影响就会有影响:

name: h2o_feet
time count
---- -----
2015-08-18T00:06:00Z 2

3、Advanced Group by time() syntax

语法:

SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(<time_interval>,<offset_interval>),[tag_key] [fill(<fill_option>)]

高级group by time()查询需要influxQL功能在select语法中,where中一个时间区域语法。注意group by语法必须在where语法之后。

time(time_interval,offset_interval)

这是一offset_interval时间文字。它将向前或向后InfluxDB预设的时间界限。可以是正的或负的offset_interval。

coverage:

高级group by time()依赖于time_interval、偏移距和(offset_interval),influxDB的时间边界,以确定每个时间间隔内包含的原始数据和查询返回的时间戳。

例子

下面的示例使用下面的示例数据样本:

> SELECT "water_level" FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:54:00Z'

name: h2o_feet
--------------
time water_level
2015-08-18T00:00:00Z 8.12
2015-08-18T00:06:00Z 8.005
2015-08-18T00:12:00Z 7.887
2015-08-18T00:18:00Z 7.762
2015-08-18T00:24:00Z 7.635
2015-08-18T00:30:00Z 7.5
2015-08-18T00:36:00Z 7.372
2015-08-18T00:42:00Z 7.234
2015-08-18T00:48:00Z 7.11
2015-08-18T00:54:00Z 6.982
例子1:组查询结果分成18分钟间隔,并将预置时间边界向前移动
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(18m,6m) name: h2o_feet
time mean
---- ----
2015-08-18T00:06:00Z 7.884666666666667
2015-08-18T00:24:00Z 7.502333333333333
2015-08-18T00:42:00Z 7.108666666666667

查询使用influxql函数计算平均water_level,分组结果为18分钟的时间间隔,并抵消了预先设定的时间界限,六分钟。
时间界限和返回的时间戳查询没有offset_interval的InfluxDB预设的时间界限。让我们先检查结果而不偏移:

> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(18m)

name: h2o_feet
time mean
---- ----
2015-08-18T00:00:00Z 7.946
2015-08-18T00:18:00Z 7.6323333333333325
2015-08-18T00:36:00Z 7.238666666666667
2015-08-18T00:54:00Z 6.982

查询的时间边界和返回的时间戳,没有偏移量间隔,遵循影响到影响的时间边界:

Time Interval Number Preset Time Boundary GROUP BY time()Interval Points Included Returned Timestamp
1 time >= 2015-08-18T00:00:00Z AND time < 2015-08-18T00:18:00Z time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:18:00Z 8.005,7.887 2015-08-18T00:00:00Z
2 time >= 2015-08-18T00:18:00Z AND time < 2015-08-18T00:36:00Z <— same 7.762,7.635,7.5 2015-08-18T00:18:00Z
3 time >= 2015-08-18T00:36:00Z AND time < 2015-08-18T00:54:00Z <— same 7.372,7.234,7.11 2015-08-18T00:36:00Z
4 time >= 2015-08-18T00:54:00Z AND time < 2015-08-18T01:12:00Z time = 2015-08-18T00:54:00Z 6.982 2015-08-18T00:54:00Z

第一预设18分钟的时间开始和结束的边界00:00之前00:18。两个原始点(8.005和7.887)下的第一组内的time()区间和在第一时间边界。注意,返回的时间戳发生在查询时间范围开始之前,查询结果排除了查询时间范围内发生的数据。

第二预设18分钟的时间开始和结束的边界就在00:36 00:18。三原点(7.762、7.635、7.5)第二组内的time()区间和第二时间边界。在这种情况下,边界时间范围和区间的时间范围是相同的。

第四预设18分钟的时间开始和结束的边界00:54之前1:12:00。一个原始点(6.982)下跌第四组内的time()区间在第四时间边界。

时间界限和返回的时间戳与offset_interval查询坚持偏移时间的界限:

Time Interval Number Offset Time Boundary GROUP BY time()Interval Points Included Returned Timestamp
1 time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:24:00Z <— same 8.005,7.887,7.762 2015-08-18T00:06:00Z
2 time >= 2015-08-18T00:24:00Z AND time < 2015-08-18T00:42:00Z <— same 7.635,7.5,7.372 2015-08-18T00:24:00Z
3 time >= 2015-08-18T00:42:00Z AND time < 2015-08-18T01:00:00Z <— same 7.234,7.11,6.982 2015-08-18T00:42:00Z
4 time >= 2015-08-18T01:00:00Z AND time < 2015-08-18T01:18:00Z NA NA NA

4、The Group by clause and fill()

一般情况下,一个group by 间隔时间用null输出代表没有值的数据,可用fill()来改变没有值 的输出方式。fill()选项包括

  • 任何数字
  • null:设置null为间隔内没有数据的输出
  • previous:复制前一个间隔的值作为没有数据的输出
  • none:跳过没有值

以下的例子可以看出fill()的用法

GROUP BY without fill()

例子1

SELECT MEAN(water_level) FROM h2o_feet WHERE time >= '2015-08-18' AND time < '2015-09-24' GROUP BY time(10d)
结果
name: h2o_feet
--------------
time mean
2015-08-13T00:00:00Z 4.306212083333323
2015-08-23T00:00:00Z 4.318944629367029
2015-09-02T00:00:00Z 4.363877681204781
2015-09-12T00:00:00Z  4.69811470811633
✨2015-09-22T00:00:00Z
GROUP BY with fill()
例子2
Use fill() with -100:
SELECT MEAN(water_level) FROM h2o_feet WHERE time >= '2015-08-18' AND time < '2015-09-24' GROUP BY time(10d) fill(-100)
结果
name: h2o_feet
--------------
time mean
2015-08-13T00:00:00Z 4.306212083333323
2015-08-23T00:00:00Z 4.318944629367029
2015-09-02T00:00:00Z 4.363877681204781
2015-09-12T00:00:00Z 4.698114708116322
✨2015-09-22T00:00:00Z -100
例子3
Use fill() with none:
SELECT MEAN(water_level) FROM h2o_feet WHERE time >= '2015-08-18' AND time < '2015-09-24' GROUP BY time(10d) fill(none)
结果
name: h2o_feet
--------------
time mean
2015-08-13T00:00:00Z 4.306212083333323
2015-08-23T00:00:00Z 4.318944629367029
2015-09-02T00:00:00Z 4.363877681204781
2015-09-12T00:00:00Z 4.69811470811633
注意:如果你用GROUP(ing) BY一些东西(如,有tags和一上时间间隔),fill()必须放在group by 的最后。
 

influxDB---Data Exploration的更多相关文章

  1. Awesome Big Data List

    https://github.com/onurakpolat/awesome-bigdata A curated list of awesome big data frameworks, resour ...

  2. influxDB聚合类函数

    1)count()函数 返回一个(field)字段中的非空值的数量. SELECT COUNT(<field_key>) FROM <measurement_name> [WH ...

  3. InfluxDB数据备份与恢复

    数据备份与恢复 Example:(192.167.8.13 InfluxDB:DeviceHistory备份到192.167.8.52,然后恢复到该服务器上)   steps:   login 192 ...

  4. Exploring the 7 Different Types of Data Stories

    Exploring the 7 Different Types of Data Stories What makes a story truly data-driven? For one, the n ...

  5. InfluxDB安装及配置

    这是我之前整理的InfluxDB安装及配置的笔记,这里记录下,也方便我以后查阅. 环境: CentOS6.5_x64 InfluxDB版本:1.1.0 一.安装 1.二进制安装 这里以centos6. ...

  6. InfluxDB读写性能测试

    今天进行了InfluxDB和MySQL的对比测试,这里记录下结果,也方便我以后查阅. 操作系统: CentOS6.5_x64InfluxDB版本 : v1.1.0MySQL版本:v5.1.73CPU ...

  7. How to use data analysis for machine learning (example, part 1)

    In my last article, I stated that for practitioners (as opposed to theorists), the real prerequisite ...

  8. Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警

    前言 这次主要分享通过Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警方案.通过执行耗时,定位哪些接口拖累了服务的性能:通过请求频次,设置适当的限流 ...

  9. .Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控

    最近这段时间一直在忙,没时间写博客,负责了一个项目,从前端到后端一直忙,同时还有其他第几个项目的系统架构要处理. 去年就开始关注net core了,只是平时写写demo,没用在项目中,正好这次机会就用 ...

  10. .NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.关于App.Metrics+InfluxDB+Grafana 1.1 App.Metrics App.Metrics是一款开源的支持. ...

随机推荐

  1. Spring搭配Ehcache实例解析

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/50538085 本文出自[我是干勾鱼的博客] 1 Ehcache简单介绍 EhCa ...

  2. Spring 注入简介

    注入方式有三种,setter,构造方法,接口注入.   常用的是setter注入和构造方法注入.   setter注入: <?xml version="1.0" encodi ...

  3. Android Camera 使用小结。两种方法:一是调用系统camera app,二是自己写camera程序。

    源文链接:http://www.cnblogs.com/franksunny/archive/2011/11/17/2252926.html Android Camera 使用小结 Android手机 ...

  4. json2.js

    /* http://www.JSON.org/json2.js 2010-03-20 Public Domain. NO WARRANTY EXPRESSED OR IMPLIED. USE AT Y ...

  5. chrome 浏览器 的一些控制台技巧

    1.查找dom元素.但它并不支持jquery语法. $$("#fock");   // 目前仅仅知道可以查找Dom元素 2.查找dom元素绑定的事件. getEventListen ...

  6. Atitit.atiDataStoreService   v2 新特性

    Atitit.atiDataStoreService   v2 新特性 1.1. V1  基础实现1 1.2. V2  增加了对  $uuid  $cur_uid参数的支持1 1.3. 增加了fld  ...

  7. Atitit.wrmi web rmi框架新特性

    Atitit.wrmi web rmi框架新特性 1. V1d  新特性1 1.1. 增加了精确参数1 1.2. 增加了req参数,命名参数模式..1 1.3. 增加了globale  传递隐含参数r ...

  8. Avira Free Antivirus 小红伞免费杀毒软件广告去除工具

    Avira Free Antivirus 小红伞免费杀毒软件经常跳出广告, 用起来比较烦, 这里提供一个广告去除的免费小工具. 原理就是用组策略来阻止广告的跳出, 网上到处都是. 一键傻瓜式去除, 也 ...

  9. YUV格式详细解释与FFMPEG的关系

    YUV主要的采样格式 主要的采样格式有YCbCr 4:2:0.YCbCr 4:2:2.YCbCr 4:1:1和 YCbCr 4:4:4.其中YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 ...

  10. python学习之pyenv

    我们经常有这种需求: linux系统中既要有python2.xxx,又要有python3.xxx,甚至更极端的情况是,有多个版本的python3.xxx. 如何实现上述需求呢?更新python的话,费 ...