时序数据库InfluxDB使用详解

https://www.linuxdaxue.com/influxdb-study-influxdb-transformations-funcitons.html#title-0

influxdb基础---常用函数:

https://blog.csdn.net/yue530tomtom/article/details/82688453

目录

 

1 安装配置

2 重要概念

timestamp

field key,field value,field set

tag key,tag value,tag set

measurement

retention policy

series

point

database

3 特色函数

GROUP BY,FILL()

INTEGRAL(field_key, unit)

SPREAD(field_key)

STDDEV(field_key)

PERCENTILE(field_key, N)

SAMPLE(field_key, N)

CUMULATIVE_SUM(field_key)

DERIVATIVE(field_key, unit) 和 NON_NEGATIVE_DERIVATIVE(field_key, unit)

4 连续查询

4.1 基本语法

示例1 自动缩小取样存储到新的measurement中

示例2 自动缩小取样并存储到新的保留策略(Retention Policy)中

示例3 使用后向引用(backreferencing)自动缩小取样并存储到新的数据库中

示例4 自动缩小取样以及配置CQ的时间范围

4.2 高级语法

示例1 只配置执行时间间隔

示例2 只配置查询时间范围

示例3 同时配置执行时间间隔和查询时间范围

示例4 配置查询时间范围和FILL填充


1 安装配置

这里说一下使用docker容器运行influxdb的步骤,物理机安装请参照官方文档。拉取镜像文件后运行即可,当前最新版本是1.3.5。启动容器时设置挂载的数据目录和开放端口。InfluxDB的操作语法InfluxQL与SQL基本一致,也提供了一个类似mysql-client的名为influx的CLI。InfluxDB本身是支持分布式部署多副本存储的,本文介绍都是针对的单节点单副本。

 

 

timestamp

既然是时间序列数据库,influxdb的数据都有一列名为time的列,里面存储UTC时间戳。

field key,field value,field set

butterflies和honeybees两列数据称为字段(fields),influxdb的字段由field key和field value组成。其中butterflies和honeybees为field key,它们为string类型,用于存储元数据。

而butterflies这一列的数据12-7为butterflies的field value,同理,honeybees这一列的23-22为honeybees的field value。field value可以为string,float,integer或boolean类型。field value通常都是与时间关联的。

field key和field value对组成的集合称之为field set。如下:

 

 

在influxdb中,字段必须存在。注意,字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。

tag key,tag value,tag set

 

  1. # docker pull influxdb

  2. # docker run -idt --name influxdb -p 8086:8086 -v /Users/ssj/influxdb:/var/lib/influxdb influxdb

  3. f216e9be15bff545befecb30d1d275552026216a939cc20c042b17419e3bde31

  4. root@f216e9be15bf:/# influx

  5. Connected to http://localhost:8086 version 1.3.5

  6. InfluxDB shell version: 1.3.5

  7. > create database cadvisor ## 创建数据库cadvisor

  8. > show databases

  9. name: databases

  10. name

  11. ----

  12. _internal

  13. cadvisor

  14. > CREATE USER testuser WITH PASSWORD 'testpwd' ## 创建用户和设置密码

  15. > GRANT ALL PRIVILEGES ON cadvisor TO testuser ## 授权数据库给指定用户

  16. > CREATE RETENTION POLICY "cadvisor_retention" ON "cadvisor" DURATION 30d REPLICATION 1 DEFAULT ## 创建默认的数据保留策略,设置保存时间30天,副本为1

  17.  

    2 重要概念

    influxdb里面有一些重要概念:database,timestamp,field key, field value, field set,tag key,tag value,tag set,measurement, retention policy ,series,point。结合下面的例子数据来说明这几个概念:

     
  18. name: census

  19. -————————————

  20. time butterflies honeybees location scientist

  21. 2015-08-18T00:00:00Z 12 23 1 langstroth

  22. 2015-08-18T00:00:00Z 1 30 1 perpetua

  23. 2015-08-18T00:06:00Z 11 28 1 langstroth

  24. 2015-08-18T00:06:00Z 3 28 1 perpetua

  25. 2015-08-18T05:54:00Z 2 11 2 langstroth

  26. 2015-08-18T06:00:00Z 1 10 2 langstroth

  27. 2015-08-18T06:06:00Z 8 23 2 perpetua

  28. 2015-08-18T06:12:00Z 7 22 2 perpetua

  29. butterflies = 12 honeybees = 23

  30. butterflies = 1 honeybees = 30

  31. butterflies = 11 honeybees = 28

  32. butterflies = 3 honeybees = 28

  33. butterflies = 2 honeybees = 11

  34. butterflies = 1 honeybees = 10

  35. butterflies = 8 honeybees = 23

  36. butterflies = 7 honeybees = 22

location和scientist这两列称为标签(tags),标签由tag key和tag value组成。location这个tag key有两个tag value:1和2,scientist有两个tag value:langstroth和perpetua。tag key和tag value对组成了tag set,示例中的tag set如下:

 

 

location = 1, scientist = langstroth

location = 2, scientist = langstroth

location = 1, scientist = perpetua

location = 2, scientist = perpetua

tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型 如果你的常用场景是根据butterflies和honeybees来查询,那么你可以将这两个列设置为tag,而其他两列设置为field,tag和field依据具体查询需求来定。

measurement

measurement是fields,tags以及time列的容器,measurement的名字用于描述存储在其中的字段数据,类似mysql的表名。如上面例子中的measurement为census。measurement相当于SQL中的表,本文中我在部分地方会用表来指代measurement。

retention policy

retention policy指数据保留策略,示例数据中的retention policy为默认的autogen。它表示数据一直保留永不过期,副本数量为1。你也可以指定数据的保留时间,如30天。

series

series是共享同一个retention policy,measurement以及tag set的数据集合。示例中数据有4个series,如下:

Arbitrary series numberRetention policyMeasurementTag set
series 1autogencensuslocation = 1,scientist = langstroth
series 2autogencensuslocation = 2,scientist = langstroth
series 3autogencensuslocation = 1,scientist = perpetua
series 4autogencensuslocation = 2,scientist = perpetua

point

point则是同一个series中具有相同时间的field set,points相当于SQL中的数据行。如下面就是一个point:

 

 

database

上面提到的结构都存储在数据库中,示例的数据库为my_database。一个数据库可以有多个measurement,retention policy, continuous queries以及user。influxdb是一个无模式的数据库,可以很容易的添加新的measurement,tags,fields等。而它的操作却和传统的数据库一样,可以使用类SQL语言查询和修改数据。

influxdb不是一个完整的CRUD数据库,它更像是一个CR-ud数据库。它优先考虑的是增加和读取数据而不是更新和删除数据的性能,而且它阻止了某些更新和删除行为使得创建和读取数据更加高效。

3 特色函数

influxdb函数分为聚合函数,选择函数,转换函数,预测函数等。除了与普通数据库一样提供了基本操作函数外,还提供了一些特色函数以方便数据统计计算,下面会一一介绍其中一些常用的特色函数。

 

先从官网导入测试数据(注:这里测试用的版本是1.3.1,最新版本是1.3.5):

 

 

下面的例子都以官方示例数据库来测试,这里只用部分数据以方便观察。measurement为h2o_feet,tag key为location,field key有level descriptionwater_level两个。

 

 

GROUP BY,FILL()

如下语句中GROUP BY time(12m),* 表示以每12分钟和tag(location)分组(如果是GROUP BY time(12m)则表示仅每12分钟分组,GROUP BY 参数只能是time和tag)。然后fill(200)表示如果这个时间段没有数据,以200填充,mean(field_key)求该范围内数据的平均值(注意:这是依据series来计算。其他还有SUM求和,MEDIAN求中位数)。LIMIT 7表示限制返回的point(记录数)最多为7条,而SLIMIT 1则是限制返回的series为1个。

注意这里的时间区间,起始时间为整点前包含这个区间第一个12m的时间,比如这里为 2015-08-17T:23:48:00Z,第一条为 2015-08-17T23:48:00Z <= t < 2015-08-18T00:00:00Z这个区间的location=coyote_creekwater_level的平均值,这里没有数据,于是填充的200。第二条为 2015-08-18T00:00:00Z <= t < 2015-08-18T00:12:00Z区间的location=coyote_creekwater_level平均值,这里为 (8.12+8.005)/ 2 = 8.0625,其他以此类推。

GROUP BY time(10m)则表示以10分钟分组,起始时间为包含这个区间的第一个10m的时间,即 2015-08-17T23:40:00Z。默认返回的是第一个series,如果要计算另外那个series,可以在SQL语句后面加上 SOFFSET 1

那如果时间小于数据本身采集的时间间隔呢,比如GROUP BY time(10s)呢?这样的话,就会按10s取一个点,没有数值的为空或者FILL填充,对应时间点有数据则保持不变。

 

 

INTEGRAL(field_key, unit)

计算数值字段值覆盖的曲面的面积值并得到面积之和。测试数据如下:

 

 

使用INTERGRAL计算面积。注意,这个面积就是这些点连接起来后与时间围成的不规则图形的面积,注意unit默认是以1秒计算,所以下面语句计算结果为3732.66=2.028*1800+分割出来的梯形和三角形面积。如果unit改为1分,则结果为3732.66/60 = 62.211。unit为2分,则结果为3732.66/120 = 31.1055。以此类推。

 

 

SPREAD(field_key)

计算数值字段的最大值和最小值的差值。

 

 

STDDEV(field_key)

计算字段的标准差。influxdb用的是贝塞尔修正的标准差计算公式 ,如下:

 

 

 

PERCENTILE(field_key, N)

选取某个字段中大于N%的这个字段值。

如果一共有4条记录,N为10,则10%*4=0.4,四舍五入为0,则查询结果为空。N为20,则 20% * 4 = 0.8,四舍五入为1,选取的是4个数中最小的数。如果N为40,40% * 4 = 1.6,四舍五入为2,则选取的是4个数中第二小的数。由此可以看出N=100时,就跟MAX(field_key)是一样的,而当N=50时,与MEDIAN(field_key)在字段值为奇数个时是一样的。

 

 

SAMPLE(field_key, N)

随机返回field key的N个值。如果语句中有GROUP BY time(),则每组数据随机返回N个值。

 

 

CUMULATIVE_SUM(field_key)

计算字段值的递增和。

 

 

DERIVATIVE(field_key, unit) 和 NON_NEGATIVE_DERIVATIVE(field_key, unit)

计算字段值的变化比。unit默认为1s,即计算的是1秒内的变化比。

如下面的第一个数据计算方法是 (2.116-2.064)/(6*60) = 0.00014..,其他计算方式同理。虽然原始数据是6m收集一次,但是这里的变化比默认是按秒来计算的。如果要按6m计算,则设置unit为6m即可。

 

 

而DERIVATIVE结合GROUP BY time,以及mean可以构造更加复杂的查询,如下所示:

 

 

这个计算其实是先根据GROUP BY time求平均值,然后对这个平均值再做变化比的计算。因为数据是按12分钟分组的,而变化比的unit是6分钟,所以差值除以2(12/6)才得到变化比。如第一个值是 (7.8245-8.0625)/2 = -0.1190

 

 

NON_NEGATIVE_DERIVATIVEDERIVATIVE不同的是它只返回的是非负的变化比:

 

 

4 连续查询

4.1 基本语法

连续查询(CONTINUOUS QUERY,简写为CQ)是指定时自动在实时数据上进行的InfluxQL查询,查询结果可以存储到指定的measurement中。基本语法格式如下:

 

 

CQ操作的是实时数据,它使用本地服务器的时间戳、GROUP BY time()时间间隔以及InfluxDB预先设置好的时间范围来确定什么时候开始查询以及查询覆盖的时间范围。注意CQ语句里面的WHERE条件是没有时间范围的,因为CQ会根据GROUP BY time()自动确定时间范围。

CQ执行的时间间隔和GROUP BY time()的时间间隔一样,它在InfluxDB预先设置的时间范围的起始时刻执行。如果GROUP BY time(1h),则单次查询的时间范围为 now()-GROUP BY time(1h)到 now(),也就是说,如果当前时间为17点,这次查询的时间范围为 16:00到16:59.99999。

下面看几个示例,示例数据如下,这是数据库transportation中名为bus_data的measurement,每15分钟统计一次乘客数和投诉数。数据文件bus_data.txt如下:

 

 

导入数据,命令如下:

 

 

示例1 自动缩小取样存储到新的measurement中

对单个字段自动缩小取样并存储到新的measurement中。

 

 

这个CQ的意思就是对bus_data每小时自动计算取样数据的平均乘客数并存储到 average_passengers中。那么在2016-08-28这天早上会执行如下流程:

 

 

示例2 自动缩小取样并存储到新的保留策略(Retention Policy)中

 

 

与示例1类似,不同的是保留的策略不是autogen,而是改成了three_weeks(创建保留策略语法 CREATE RETENTION POLICY "three_weeks" ON "transportation" DURATION 3w REPLICATION 1)。

 

 

示例3 使用后向引用(backreferencing)自动缩小取样并存储到新的数据库中

 

 

使用后向引用语法自动缩小取样并存储到新的数据库中。语法 :MEASUREMENT 用来指代后面的表,而 /.*/则是分别查询所有的表。这句CQ的含义就是每30分钟自动查询transportation的所有表(这里只有bus_data一个表),并将30分钟内数字字段(passengers和complaints)求平均值存储到新的数据库 downsampled_transportation中。

最终结果如下:

 

 

示例4 自动缩小取样以及配置CQ的时间范围

 

 

与前面几个示例不同的是,这里的GROUP BY time(1h, 15m)指定了一个时间偏移,也就是说 cq_basic_offset执行的时间不再是整点,而是往后偏移15分钟。执行流程如下:

 

 

最终结果:

 

 

4.2 高级语法

InfluxDB连续查询的高级语法如下:

 

 

与基本语法不同的是,多了RESAMPLE关键字。高级语法里CQ的执行时间和查询时间范围则与RESAMPLE里面的两个interval有关系。

高级语法中CQ以EVERY interval的时间间隔执行,执行时查询的时间范围则是FOR interval来确定。如果FOR interval为2h,当前时间为17:00,则查询的时间范围为15:00-16:59.999999RESAMPLE的EVERY和FOR两个关键字可以只有一个

示例的数据表如下,比之前的多了几条记录为了示例3和示例4的测试:

 

 

示例1 只配置执行时间间隔

 

 

这里配置了30分钟执行一次CQ,没有指定FOR interval,于是查询的时间范围还是GROUP BY time(1h)指定的一个小时,执行流程如下:

 

 

需要注意的是,这里的 8点到9点这个区间执行了两次,第一次执行时时8:30,平均值是 (8+15+15)/ 3 = 12.6667,而第二次执行时间是9:00,平均值是 (8+15+15+17) / 4=13.75,而且最后第二个结果覆盖了第一个结果。InfluxDB如何处理重复的记录可以参见这个文档

最终结果:

 

 

示例2 只配置查询时间范围

 

 

只配置了时间范围,而没有配置EVERY interval。这样,执行的时间间隔与GROUP BY time(30m)一样为30分钟,而查询的时间范围为1小时,由于是按30分钟分组,所以每次会写入两条记录。执行流程如下:

 

 

需要注意的是,cq_advanced_for每次写入了两条记录,重复的记录会被覆盖。

最终结果:

 

 

示例3 同时配置执行时间间隔和查询时间范围

 

 

这里配置了执行间隔为1小时,而查询范围90分钟,最后分组是30分钟,每次插入了三条记录。执行流程如下:

 

 

最终结果:

 

 

示例4 配置查询时间范围和FILL填充

 

 

在前面值配置查询时间范围的基础上,加上FILL填充空的记录。执行流程如下:

 

 

最终结果:

 

 

 

转载于:https://www.cnblogs.com/zhangboyu/p/7503543.html

 

 

 

  1. name: census

  2. -----------------

  3. time butterflies honeybees location scientist

  4. 2015-08-18T00:00:00Z 1 30 1 perpetua

  5. 聚合函数:FILL()INTEGRAL()SPREAD(), STDDEV()MEAN()MEDIAN()等。
  6. 选择函数: SAMPLE()PERCENTILE()FIRST()LAST()TOP()BOTTOM()等。
  7. 转换函数: DERIVATIVE()DIFFERENCE()等。
  8. 预测函数:HOLT_WINTERS()
  9. $ curl https://s3.amazonaws.com/noaa.water-database/NOAA_data.txt -o NOAA_data.txt

  10. $ influx -import -path=NOAA_data.txt -precision=s -database=NOAA_water_database

  11. $ influx -precision rfc3339 -database NOAA_water_database

  12. Connected to http://localhost:8086 version 1.3.1

  13. InfluxDB shell 1.3.1

  14. > show measurements

  15. name: measurements

  16. name

  17. ----

  18. average_temperature

  19. distincts

  20. h2o_feet

  21. h2o_pH

  22. h2o_quality

  23. h2o_temperature

  24.  
  25. > show series from h2o_feet;

  26. key

  27. ---

  28. h2o_feet,location=coyote_creek

  29. h2o_feet,location=santa_monica

  30. > SELECT * FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z'

  31. name: h2o_feet

  32. time level description location water_level

  33. ---- ----------------- -------- -----------

  34. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12

  35. 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064

  36. 2015-08-18T00:06:00Z between 6 and 9 feet coyote_creek 8.005

  37. 2015-08-18T00:06:00Z below 3 feet santa_monica 2.116

  38. 2015-08-18T00:12:00Z between 6 and 9 feet coyote_creek 7.887

  39. 2015-08-18T00:12:00Z below 3 feet santa_monica 2.028

  40. 2015-08-18T00:18:00Z between 6 and 9 feet coyote_creek 7.762

  41. 2015-08-18T00:18:00Z below 3 feet santa_monica 2.126

  42. 2015-08-18T00:24:00Z between 6 and 9 feet coyote_creek 7.635

  43. 2015-08-18T00:24:00Z below 3 feet santa_monica 2.041

  44. 2015-08-18T00:30:00Z between 6 and 9 feet coyote_creek 7.5

  45. 2015-08-18T00:30:00Z below 3 feet santa_monica 2.051

  46. ## GROUP BY time(12m)

  47. > SELECT mean("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m),* fill(200) LIMIT 7 SLIMIT 1

  48. name: h2o_feet

  49. tags: location=coyote_creek

  50. time mean

  51. ---- ----

  52. 2015-08-17T23:48:00Z 200

  53. 2015-08-18T00:00:00Z 8.0625

  54. 2015-08-18T00:12:00Z 7.8245

  55. 2015-08-18T00:24:00Z 7.5675

  56.  
  57. ## GROUP BY time(10m),SOFFSET设置为1

  58. > SELECT mean("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(10m),* fill(200) LIMIT 7 SLIMIT 1 SOFFSET 1

  59. name: h2o_feet

  60. tags: location=santa_monica

  61. time mean

  62. ---- ----

  63. 2015-08-17T23:40:00Z 200

  64. 2015-08-17T23:50:00Z 200

  65. 2015-08-18T00:00:00Z 2.09

  66. 2015-08-18T00:10:00Z 2.077

  67. 2015-08-18T00:20:00Z 2.041

  68. 2015-08-18T00:30:00Z 2.051

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

  70.  
  71. name: h2o_feet

  72. time water_level

  73. ---- -----------

  74. 2015-08-18T00:00:00Z 2.064

  75. 2015-08-18T00:06:00Z 2.116

  76. 2015-08-18T00:12:00Z 2.028

  77. 2015-08-18T00:18:00Z 2.126

  78. 2015-08-18T00:24:00Z 2.041

  79. 2015-08-18T00:30:00Z 2.051

  80. # unit为默认的1秒

  81. > SELECT INTEGRAL("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'

  82. name: h2o_feet

  83. time integral

  84. ---- --------

  85. 1970-01-01T00:00:00Z 3732.66

  86.  
  87. # unit为1分

  88. > SELECT INTEGRAL("water_level", 1m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'

  89. name: h2o_feet

  90. time integral

  91. ---- --------

  92. 1970-01-01T00:00:00Z 62.211

  93. > SELECT SPREAD("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m),* fill(18) LIMIT 3 SLIMIT 1 SOFFSET 1

  94. name: h2o_feet

  95. tags: location=santa_monica

  96. time spread

  97. ---- ------

  98. 2015-08-17T23:48:00Z 18

  99. 2015-08-18T00:00:00Z 0.052000000000000046

  100. 2015-08-18T00:12:00Z 0.09799999999999986

  101. mean=(v1+v2+...+vn)/n;
  102. stddev = math.sqrt(
    ((v1-mean)2 + (v2-mean)2 + ...+(vn-mean)2)/(n-1)
    )
  103. > SELECT STDDEV("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m),* fill(18) SLIMIT 1;

  104. name: h2o_feet

  105. tags: location=coyote_creek

  106. time stddev

  107. ---- ------

  108. 2015-08-17T23:48:00Z 18

  109. 2015-08-18T00:00:00Z 0.08131727983645186

  110. 2015-08-18T00:12:00Z 0.08838834764831845

  111. 2015-08-18T00:24:00Z 0.09545941546018377

  112. > SELECT PERCENTILE("water_level",20) FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)

  113. name: h2o_feet

  114. time percentile

  115. ---- ----------

  116. 2015-08-17T23:48:00Z

  117. 2015-08-18T00:00:00Z 2.064

  118. 2015-08-18T00:12:00Z 2.028

  119. 2015-08-18T00:24:00Z 2.041

  120.  
  121. > SELECT PERCENTILE("water_level",40) FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)

  122. > SELECT SAMPLE("water_level",2) FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z';

  123. name: h2o_feet

  124. time sample

  125. ---- ------

  126. 2015-08-18T00:00:00Z 2.064

  127. 2015-08-18T00:12:00Z 2.028

  128.  
  129. > SELECT SAMPLE("water_level",2) FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m);

  130. name: h2o_feet

  131. time sample

  132. ---- ------

  133. 2015-08-18T00:06:00Z 2.116

  134. 2015-08-18T00:06:00Z 8.005

  135. 2015-08-18T00:12:00Z 7.887

  136. 2015-08-18T00:18:00Z 7.762

  137. 2015-08-18T00:24:00Z 7.635

  138. 2015-08-18T00:30:00Z 2.051

  139. > SELECT CUMULATIVE_SUM("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:30:00Z';

  140. name: h2o_feet

  141. time cumulative_sum

  142. ---- --------------

  143. 2015-08-18T00:00:00Z 8.12

  144. 2015-08-18T00:00:00Z 10.184

  145. 2015-08-18T00:06:00Z 18.189

  146. 2015-08-18T00:06:00Z 20.305

  147. 2015-08-18T00:12:00Z 28.192

  148. 2015-08-18T00:12:00Z 30.22

  149. 2015-08-18T00:18:00Z 37.982

  150. 2015-08-18T00:18:00Z 40.108

  151. 2015-08-18T00:24:00Z 47.742999999999995

  152. 2015-08-18T00:24:00Z 49.78399999999999

  153. 2015-08-18T00:30:00Z 57.28399999999999

  154. 2015-08-18T00:30:00Z 59.334999999999994

  155. > SELECT DERIVATIVE("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'

  156. name: h2o_feet

  157. time derivative

  158. ---- ----------

  159. 2015-08-18T00:06:00Z 0.00014444444444444457

  160. 2015-08-18T00:12:00Z -0.00024444444444444465

  161. 2015-08-18T00:18:00Z 0.0002722222222222218

  162. 2015-08-18T00:24:00Z -0.000236111111111111

  163. 2015-08-18T00:30:00Z 0.00002777777777777842

  164.  
  165. > SELECT DERIVATIVE("water_level", 6m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'

  166. name: h2o_feet

  167. time derivative

  168. ---- ----------

  169. 2015-08-18T00:06:00Z 0.052000000000000046

  170. 2015-08-18T00:12:00Z -0.08800000000000008

  171. 2015-08-18T00:18:00Z 0.09799999999999986

  172. 2015-08-18T00:24:00Z -0.08499999999999996

  173. 2015-08-18T00:30:00Z 0.010000000000000231

  174. > SELECT DERIVATIVE(mean("water_level"), 6m) FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' group by time(12m), *

  175. name: h2o_feet

  176. tags: location=coyote_creek

  177. time derivative

  178. ---- ----------

  179. 2015-08-18T00:12:00Z -0.11900000000000022

  180. 2015-08-18T00:24:00Z -0.12849999999999984

  181.  
  182. name: h2o_feet

  183. tags: location=santa_monica

  184. time derivative

  185. ---- ----------

  186. 2015-08-18T00:12:00Z -0.00649999999999995

  187. 2015-08-18T00:24:00Z -0.015499999999999847

  188. > SELECT mean("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' group by time(12m), *

  189. name: h2o_feet

  190. tags: location=coyote_creek

  191. time mean

  192. ---- ----

  193. 2015-08-18T00:00:00Z 8.0625

  194. 2015-08-18T00:12:00Z 7.8245

  195. 2015-08-18T00:24:00Z 7.5675

  196.  
  197. name: h2o_feet

  198. tags: location=santa_monica

  199. time mean

  200. ---- ----

  201. 2015-08-18T00:00:00Z 2.09

  202. 2015-08-18T00:12:00Z 2.077

  203. 2015-08-18T00:24:00Z 2.0460000000000003

  204. > SELECT DERIVATIVE(mean("water_level"), 6m) FROM "h2o_feet" WHERE location='santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' group by time(6m), *

  205. name: h2o_feet

  206. tags: location=santa_monica

  207. time derivative

  208. ---- ----------

  209. 2015-08-18T00:06:00Z 0.052000000000000046

  210. 2015-08-18T00:12:00Z -0.08800000000000008

  211. 2015-08-18T00:18:00Z 0.09799999999999986

  212. 2015-08-18T00:24:00Z -0.08499999999999996

  213. 2015-08-18T00:30:00Z 0.010000000000000231

  214.  
  215. > SELECT NON_NEGATIVE_DERIVATIVE(mean("water_level"), 6m) FROM "h2o_feet" WHERE location='santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' group by time(6m), *

  216. name: h2o_feet

  217. tags: location=santa_monica

  218. time non_negative_derivative

  219. ---- -----------------------

  220. 2015-08-18T00:06:00Z 0.052000000000000046

  221. 2015-08-18T00:18:00Z 0.09799999999999986

  222. 2015-08-18T00:30:00Z 0.010000000000000231

  223. CREATE CONTINUOUS QUERY <cq_name> ON <database_name>

  224. BEGIN

  225. <cq_query>

  226. END

  227.  
  228. cq_query格式:

  229. SELECT <function[s]> INTO <destination_measurement> FROM <measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<tag_key[s]>]

  230.  
  231. # DDL

  232. CREATE DATABASE transportation

  233.  
  234. # DML

  235. # CONTEXT-DATABASE: transportation

  236.  
  237. bus_data,complaints=9 passengers=5 1472367600

  238. bus_data,complaints=9 passengers=8 1472368500

  239. bus_data,complaints=9 passengers=8 1472369400

  240. bus_data,complaints=9 passengers=7 1472370300

  241. bus_data,complaints=9 passengers=8 1472371200

  242. bus_data,complaints=7 passengers=15 1472372100

  243. bus_data,complaints=7 passengers=15 1472373000

  244. bus_data,complaints=7 passengers=17 1472373900

  245. bus_data,complaints=7 passengers=20 1472374800

  246. root@f216e9be15bf:/# influx -import -path=bus_data.txt -precision=s

  247. root@f216e9be15bf:/# influx -precision=rfc3339 -database=transportation

  248. Connected to http://localhost:8086 version 1.3.5

  249. InfluxDB shell version: 1.3.5

  250. > select * from bus_data

  251. name: bus_data

  252. time complaints passengers

  253. ---- ---------- ----------

  254. 2016-08-28T07:00:00Z 9 5

  255. 2016-08-28T07:15:00Z 9 8

  256. 2016-08-28T07:30:00Z 9 8

  257. 2016-08-28T07:45:00Z 9 7

  258. 2016-08-28T08:00:00Z 9 8

  259. 2016-08-28T08:15:00Z 7 15

  260. 2016-08-28T08:30:00Z 7 15

  261. 2016-08-28T08:45:00Z 7 17

  262. 2016-08-28T09:00:00Z 7 20

  263. CREATE CONTINUOUS QUERY "cq_basic" ON "transportation"

  264. BEGIN

  265. SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h)

  266. END

  267. At 8:00 cq_basic 执行查询,查询时间范围 time >= '7:00' AND time < '08:00'.

  268. cq_basic写入一条记录到 average_passengers:

  269. name: average_passengers

  270. ------------------------

  271. time mean

  272. 2016-08-28T07:00:00Z 7

  273. At 9:00 cq_basic 执行查询,查询时间范围 time >= '8:00' AND time < '9:00'.

  274. cq_basic写入一条记录到 average_passengers:

  275. name: average_passengers

  276. ------------------------

  277. time mean

  278. 2016-08-28T08:00:00Z 13.75

  279.  
  280. # Results

  281. > SELECT * FROM "average_passengers"

  282. name: average_passengers

  283. ------------------------

  284. time mean

  285. 2016-08-28T07:00:00Z 7

  286. 2016-08-28T08:00:00Z 13.75

  287. CREATE CONTINUOUS QUERY "cq_basic_rp" ON "transportation"

  288. BEGIN

  289. SELECT mean("passengers") INTO "transportation"."three_weeks"."average_passengers" FROM "bus_data" GROUP BY time(1h)

  290. END

  291. > SELECT * FROM "transportation"."three_weeks"."average_passengers"

  292. name: average_passengers

  293. ------------------------

  294. time mean

  295. 2016-08-28T07:00:00Z 7

  296. 2016-08-28T08:00:00Z 13.75

  297. CREATE CONTINUOUS QUERY "cq_basic_br" ON "transportation"

  298. BEGIN

  299. SELECT mean(*) INTO "downsampled_transportation"."autogen".:MEASUREMENT FROM /.*/ GROUP BY time(30m),*

  300. END

  301. > SELECT * FROM "downsampled_transportation."autogen"."bus_data"

  302. name: bus_data

  303. --------------

  304. time mean_complaints mean_passengers

  305. 2016-08-28T07:00:00Z 9 6.5

  306. 2016-08-28T07:30:00Z 9 7.5

  307. 2016-08-28T08:00:00Z 8 11.5

  308. 2016-08-28T08:30:00Z 7 16

  309. CREATE CONTINUOUS QUERY "cq_basic_offset" ON "transportation"

  310. BEGIN

  311. SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h,15m)

  312. END

  313. At 8:15 cq_basic_offset 执行查询的时间范围 time >= '7:15' AND time < '8:15'.

  314. name: average_passengers

  315. ------------------------

  316. time mean

  317. 2016-08-28T07:15:00Z 7.75

  318. At 9:15 cq_basic_offset 执行查询的时间范围 time >= '8:15' AND time < '9:15'.

  319. name: average_passengers

  320. ------------------------

  321. time mean

  322. 2016-08-28T08:15:00Z 16.75

  323. > SELECT * FROM "average_passengers"

  324. name: average_passengers

  325. ------------------------

  326. time mean

  327. 2016-08-28T07:15:00Z 7.75

  328. 2016-08-28T08:15:00Z 16.75

  329. CREATE CONTINUOUS QUERY <cq_name> ON <database_name>

  330. RESAMPLE EVERY <interval> FOR <interval>

  331. BEGIN

  332. <cq_query>

  333. END

  334. name: bus_data

  335. --------------

  336. time passengers

  337. 2016-08-28T06:30:00Z 2

  338. 2016-08-28T06:45:00Z 4

  339. 2016-08-28T07:00:00Z 5

  340. 2016-08-28T07:15:00Z 8

  341. 2016-08-28T07:30:00Z 8

  342. 2016-08-28T07:45:00Z 7

  343. 2016-08-28T08:00:00Z 8

  344. 2016-08-28T08:15:00Z 15

  345. 2016-08-28T08:30:00Z 15

  346. 2016-08-28T08:45:00Z 17

  347. 2016-08-28T09:00:00Z 20

  348. CREATE CONTINUOUS QUERY "cq_advanced_every" ON "transportation"

  349. RESAMPLE EVERY 30m

  350. BEGIN

  351. SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h)

  352. END

  353. At 8:00, cq_advanced_every 执行时间范围 time >= '7:00' AND time < '8:00'.

  354. name: average_passengers

  355. ------------------------

  356. time mean

  357. 2016-08-28T07:00:00Z 7

  358. At 8:30, cq_advanced_every 执行时间范围 time >= '8:00' AND time < '9:00'.

  359. name: average_passengers

  360. ------------------------

  361. time mean

  362. 2016-08-28T08:00:00Z 12.6667

  363. At 9:00, cq_advanced_every 执行时间范围 time >= '8:00' AND time < '9:00'.

  364. name: average_passengers

  365. ------------------------

  366. time mean

  367. 2016-08-28T08:00:00Z 13.75

  368. > SELECT * FROM "average_passengers"

  369. name: average_passengers

  370. ------------------------

  371. time mean

  372. 2016-08-28T07:00:00Z 7

  373. 2016-08-28T08:00:00Z 13.75

  374. CREATE CONTINUOUS QUERY "cq_advanced_for" ON "transportation"

  375. RESAMPLE FOR 1h

  376. BEGIN

  377. SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(30m)

  378. END

  379. At 8:00 cq_advanced_for 查询时间范围:time >= '7:00' AND time < '8:00'.

  380. 写入两条记录。

  381. name: average_passengers

  382. ------------------------

  383. time mean

  384. 2016-08-28T07:00:00Z 6.5

  385. 2016-08-28T07:30:00Z 7.5

  386. At 8:30 cq_advanced_for 查询时间范围:time >= '7:30' AND time < '8:30'.

  387. 写入两条记录。

  388. name: average_passengers

  389. ------------------------

  390. time mean

  391. 2016-08-28T07:30:00Z 7.5

  392. 2016-08-28T08:00:00Z 11.5

  393. At 9:00 cq_advanced_for 查询时间范围:time >= '8:00' AND time < '9:00'.

  394. 写入两条记录。

  395. name: average_passengers

  396. ------------------------

  397. time mean

  398. 2016-08-28T08:00:00Z 11.5

  399. 2016-08-28T08:30:00Z 16

  400. > SELECT * FROM "average_passengers"

  401. name: average_passengers

  402. ------------------------

  403. time mean

  404. 2016-08-28T07:00:00Z 6.5

  405. 2016-08-28T07:30:00Z 7.5

  406. 2016-08-28T08:00:00Z 11.5

  407. 2016-08-28T08:30:00Z 16

  408. CREATE CONTINUOUS QUERY "cq_advanced_every_for" ON "transportation"

  409. RESAMPLE EVERY 1h FOR 90m

  410. BEGIN

  411. SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(30m)

  412. END

  413. At 8:00 cq_advanced_every_for 查询时间范围 time >= '6:30' AND time < '8:00'.

  414. 插入三条记录

  415. name: average_passengers

  416. ------------------------

  417. time mean

  418. 2016-08-28T06:30:00Z 3

  419. 2016-08-28T07:00:00Z 6.5

  420. 2016-08-28T07:30:00Z 7.5

  421. At 9:00 cq_advanced_every_for 查询时间范围 time >= '7:30' AND time < '9:00'.

  422. 插入三条记录

  423. name: average_passengers

  424. ------------------------

  425. time mean

  426. 2016-08-28T07:30:00Z 7.5

  427. 2016-08-28T08:00:00Z 11.5

  428. 2016-08-28T08:30:00Z 16

  429. > SELECT * FROM "average_passengers"

  430. name: average_passengers

  431. ------------------------

  432. time mean

  433. 2016-08-28T06:30:00Z 3

  434. 2016-08-28T07:00:00Z 6.5

  435. 2016-08-28T07:30:00Z 7.5

  436. 2016-08-28T08:00:00Z 11.5

  437. 2016-08-28T08:30:00Z 16

  438. CREATE CONTINUOUS QUERY "cq_advanced_for_fill" ON "transportation"

  439. RESAMPLE FOR 2h

  440. BEGIN

  441. SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h) fill(1000)

  442. END

  443. At 6:00, cq_advanced_for_fill 查询时间范围:time >= '4:00' AND time < '6:00',没有数据,不填充。

  444.  
  445. At 7:00, cq_advanced_for_fill 查询时间范围:time >= '5:00' AND time < '7:00'. 写入两条记录,没有数据的时间点填充1000。

  446. ------------------------

  447. time mean

  448. 2016-08-28T05:00:00Z 1000 <------ fill(1000)

  449. 2016-08-28T06:00:00Z 3 <------ average of 2 and 4

  450.  
  451. […] At 11:00, cq_advanced_for_fill 查询时间范围:time >= '9:00' AND time < '11:00'.写入两条记录,没有数据的点填充1000。

  452. name: average_passengers

  453. ------------------------

  454. 2016-08-28T09:00:00Z 20 <------ average of 20

  455. 2016-08-28T10:00:00Z 1000 <------ fill(1000)

  456.  
  457. At 12:00, cq_advanced_for_fill 查询时间范围:time >= '10:00' AND time < '12:00'。没有数据,不填充。

  458. > SELECT * FROM "average_passengers"

  459. name: average_passengers

  460. ------------------------

  461. time mean

  462. 2016-08-28T05:00:00Z 1000

  463. 2016-08-28T06:00:00Z 3

  464. 2016-08-28T07:00:00Z 7

  465. 2016-08-28T08:00:00Z 13.75

  466. 2016-08-28T09:00:00Z 20

  467. 2016-08-28T10:00:00Z 1000

    • name: h2o_feet

    • time percentile

    • ---- ----------

    • 2015-08-17T23:48:00Z

    • 2015-08-18T00:00:00Z 2.116

    • 2015-08-18T00:12:00Z 2.126

    • 2015-08-18T00:24:00Z 2.051

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值