influxDB---Data Exploration
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
例子3
--------------
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
Usefill()
withnone
:
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的更多相关文章
- Awesome Big Data List
https://github.com/onurakpolat/awesome-bigdata A curated list of awesome big data frameworks, resour ...
- influxDB聚合类函数
1)count()函数 返回一个(field)字段中的非空值的数量. SELECT COUNT(<field_key>) FROM <measurement_name> [WH ...
- InfluxDB数据备份与恢复
数据备份与恢复 Example:(192.167.8.13 InfluxDB:DeviceHistory备份到192.167.8.52,然后恢复到该服务器上) steps: login 192 ...
- 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 ...
- InfluxDB安装及配置
这是我之前整理的InfluxDB安装及配置的笔记,这里记录下,也方便我以后查阅. 环境: CentOS6.5_x64 InfluxDB版本:1.1.0 一.安装 1.二进制安装 这里以centos6. ...
- InfluxDB读写性能测试
今天进行了InfluxDB和MySQL的对比测试,这里记录下结果,也方便我以后查阅. 操作系统: CentOS6.5_x64InfluxDB版本 : v1.1.0MySQL版本:v5.1.73CPU ...
- 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 ...
- Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警
前言 这次主要分享通过Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警方案.通过执行耗时,定位哪些接口拖累了服务的性能:通过请求频次,设置适当的限流 ...
- .Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控
最近这段时间一直在忙,没时间写博客,负责了一个项目,从前端到后端一直忙,同时还有其他第几个项目的系统架构要处理. 去年就开始关注net core了,只是平时写写demo,没用在项目中,正好这次机会就用 ...
- .NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.关于App.Metrics+InfluxDB+Grafana 1.1 App.Metrics App.Metrics是一款开源的支持. ...
随机推荐
- 利用Perlin nosie 完毕(PS 滤镜—— 分成云彩)
%%%% Cloud %%%% 利用perlin noise生成云彩 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image ...
- NSight统计数据的颜色,缩写意义是什么?来自NV Jeff Kiel 比较官方的解释!
结合这个图示来看:https://dl.dropboxusercontent.com/u/32077444/nsight.pdf 1) The bars you see in the Summary ...
- XAOP的使用示范例子
代码地址如下:http://www.demodashi.com/demo/12976.html XAOP 一个简易的AOP(Android)应用框架.囊括了最实用的AOP应用. 特点 支持快速点击切片 ...
- Mylyn--谁用谁知道!
Mylyn――谁用谁知道!http://www.blogjava.net/alwayscy/archive/2008/06/15/208022.html 此文是我之Mylyn初体验,不搞大而全,而只把 ...
- spring学习笔记(四)
1.aop编程 a.前置通知 .... <!-- 配置被代理的对象 --> <bean id="test1Service" class="com. ...
- C# NPOI操作Excel(上)
NPOI 官网下载DLL:http://npoi.codeplex.com/releases 1.读取Excel转为DataTable /// <summary> /// 读取excel转 ...
- unity, Invoke延迟执行
参考:http://blog.christianhenschel.com/2013/05/15/how-to-do-delayed-function-calls-in-unity3d-one-line ...
- Java 8 Lambda表达式介绍
Lambda是什么? Lambda是一个匿名函数,我们可以把Lambda理解为是一段可以传递的代码.可以写出简洁.灵活的代码.作为一种更紧凑的代码风格,使java的语言表达能力得到提升. 可以这么说l ...
- <LeetCode OJ> 26 / 264 / 313 Ugly Number (I / II / III)
Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...
- JS DOM -- 关于回车键盘事件执行事件
一.需求制作一个模拟对话框, 二. 1.需要发送后,输入框清空 2.按enter键可发送 三.代码部分 <!DOCTYPE HTML> <html> <head> ...