选择函数
本文档主要介绍了选择函数(Selectors)的语法结构、语法说明以及使用示例。
BOTTOM()
返回最小的N个field value。
语法
SELECT BOTTOM(<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]
语法说明
BOTTOM(field_key,N)
:返回field key对应的最小的N个值。
BOTTOM(field_key,tag_key(s),N)
:返回tag key的N个tag value对应的field key的最小值。
BOTTOM(field_key,N),tag_key(s),field_key(s)
:返回括号中的field key对应的最小的N个值,以及相关的tag和/或field。
BOTTOM()
:支持数据类型为int64和float64的field value。
如果最小值有两个或多个相等的值,BOTTOM()返回具有最早时间戳的field value。当BOTTOM()函数与INTO子句一起使用时,BOTTOM()与其它InfluxQL函数不同。
示例1:选择指定field key对应的最小的三个值
SELECT BOTTOM("water_level",3) FROM "h2o_feet"
name: h2o_feet
time bottom
----------
2015-08-29T14:30:00Z-0.61
2015-08-29T14:36:00Z-0.591
2015-08-30T15:18:00Z-0.594
该查询返回measurement h2o_feet
中field key water_level
对应的最小的三个值。
示例2:选择两个tag对应的field key的最小值
SELECT BOTTOM("water_level","location",2) FROM "h2o_feet"
name: h2o_feet
time bottom location
------------------
2015-08-29T10:36:00Z-0.243 santa_monica
2015-08-29T14:30:00Z-0.61 coyote_creek
该查询返回tag key location
的两个tag value对应的field key water_level
的最小值。
示例3:选择指定field key对应的最小的四个值以及相关的tag和field
SELECT BOTTOM("water_level",4),"location","level description" FROM "h2o_feet"
name: h2o_feet
time bottom location level description
-----------------------------------
2015-08-29T14:24:00Z-0.587 coyote_creek below 3 feet
2015-08-29T14:30:00Z-0.61 coyote_creek below 3 feet
2015-08-29T14:36:00Z-0.591 coyote_creek below 3 feet
2015-08-30T15:18:00Z-0.594 coyote_creek below 3 feet
该查询返回field key water_level
对应的最小的四个值,以及相关的tag key location
和field key level description
的值。
示例4:选择指定field key对应的最小的三个值并包含多个子句
SELECT BOTTOM("water_level",3),"location" FROM "h2o_feet" WHERE time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(24m) ORDER BY time DESC
name: h2o_feet
time bottom location
------------------
2015-08-18T00:48:00Z1.991 santa_monica
2015-08-18T00:54:00Z2.054 santa_monica
2015-08-18T00:54:00Z6.982 coyote_creek
2015-08-18T00:24:00Z2.041 santa_monica
2015-08-18T00:30:00Z2.051 santa_monica
2015-08-18T00:42:00Z2.057 santa_monica
2015-08-18T00:00:00Z2.064 santa_monica
2015-08-18T00:06:00Z2.116 santa_monica
2015-08-18T00:12:00Z2.028 santa_monica
该查询返回在2015-08-18T00:00:00Z
和2015-08-18T00:54:00Z
之间的每个24分钟间隔内,field key water_level
对应的最小的三个值,并且以递减的时间戳顺序返回结果。
GROUP BY time()
子句不会覆盖数据点的原始时间戳。
BOTTOM()的常见问题
问题一:BOTTOM()和GROUP BY time()子句同时使用
对于同时带有BOTTOM()
和GROUP BY time()
子句的查询,将返回每个GROUP BY time()
时间间隔的指定个数的数据点。对于大多数GROUP BY time()
查询,返回的时间戳表示GROUP BY time()
时间间隔的开始时间,但是,带有BOTTOM()
函数的GROUP BY time()
查询则不一样,它们保留原始数据点的时间戳。
示例:以下查询返回每18分钟GROUP BY time()
间隔对应的两个数据点。请注意,返回的时间戳是数据点的原始时间戳;它们不会被强制要求必须匹配GROUP BY time()
间隔的开始时间。
SELECT BOTTOM("water_level",2) FROM "h2o_feet" WHERE time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:30:00Z' AND "location"='santa_monica' GROUP BY time(18m)
name: h2o_feet
time bottom
----------
__
2015-08-18T00:00:00Z2.064|
2015-08-18T00:12:00Z2.028|<-------Smallest points for the first time interval
--
__
2015-08-18T00:24:00Z2.041|
2015-08-18T00:30:00Z2.051|<-------Smallest points for the second time interval
--
问题二:BOTTOM()和具有少于N个tag value的tag key
使用语法SELECT BOTTOM(<field_key>,<tag_key>,<N>)
的查询可以返回比预期少的数据点。如果tag key有X
个tag value,但是查询指定的是N
个tag value,如果X
小于N
,那么查询将返回X
个数据点。
示例:以下查询请求的是tag key location
的三个tag value对于的water_level
的最小值。因为tag key location
只有两个tag value(santa_monica
和coyote_creek
),所以该查询返回两个数据点而不是三个。
SELECT BOTTOM("water_level","location",3) FROM "h2o_feet"
name: h2o_feet
time bottom location
------------------
2015-08-29T10:36:00Z-0.243 santa_monica
2015-08-29T14:30:00Z-0.61 coyote_creek
问题三:BOTTOM()、tag和INTO子句
当使用INTO
子句但没有使用GROUP BY tag
子句时,大多数InfluxQL函数将原始数据中的tag转换为新写入数据中的field。这种行为同样适用于BOTTOM()
函数除非BOTTOM()
中包含tag key作为参数:BOTTOM(field_key,tag_key(s),N)
。在这些情况下,系统会将指定的tag保留为新写入数据中的tag。
示例:下面代码块中的第一个查询返回tag key location
的两个tag value对应的field key water_level
的最小值,并且,它这些结果写入measurement bottom_water_levels
中。第二个查询展示了TSDB For InfluxDB®将tag location
保留为measurement bottom_water_levels
中的tag。
> SELECT BOTTOM("water_level","location",2) INTO "bottom_water_levels" FROM "h2o_feet"
name: result
time written
-----------
1970-01-01T00:00:00Z2
> SHOW TAG KEYS FROM "bottom_water_levels"
name: bottom_water_levels
tagKey
------
location
FIRST()
返回具有最早时间戳的field value。
语法
SELECT FIRST(<field_key>)[,<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]
语法说明
FIRST(field_key)
:返回field key对应的具有最早时间戳的field value。
FIRST(/regular_expression/)
:返回与正则表达式匹配的每个field key对应的具有最早时间戳的field value。
FIRST(*)
:返回在measurement中每个field key对应的具有最早时间戳的field value。
FIRST(field_key),tag_key(s),field_key(s)
:返回括号中的field key对应的具有最早时间戳的field value,以及相关的tag和/或field。
FIRST()
:支持所有数据类型的field value。
示例1:选择指定field key对应的具有最早时间戳的field value
SELECT FIRST("level description") FROM "h2o_feet"
name: h2o_feet
time first
---------
2015-08-18T00:00:00Z between 6 and 9 feet
该查询返回measurement h2o_feet
中field key level description
对应的具有最早时间戳的field value。
示例2:选择measurement中每个field key对应的具有最早时间戳的field value
SELECT FIRST(*) FROM "h2o_feet"
name: h2o_feet
time first_level description first_water_level
--------------------------------------------
1970-01-01T00:00:00Z between 6 and 9 feet 8.12
该查询返回measurement h2o_feet
中每个field key对应的具有最早时间戳的field value。measurement h2o_feet
中有两个field key:level description
和water_level
。
示例3:选择与正则表达式匹配的每个field key对应的具有最早时间戳的field value
SELECT FIRST(/level/) FROM "h2o_feet"
name: h2o_feet
time first_level description first_water_level
--------------------------------------------
1970-01-01T00:00:00Z between 6 and 9 feet 8.12
该查询返回measurement h2o_feet
中每个包含单词level
的field key对应的具有最早时间戳的field value。
示例4:选择指定field key对应的具有最早时间戳的field value以及相关的tag和field
SELECT FIRST("level description"),"location","water_level" FROM "h2o_feet"
name: h2o_feet
time first location water_level
----------------------------
2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
该查询返回measurement h2o_feet
中field key level description
对应的具有最早时间戳的field value,以及相关的tag key location
和field key water_level
的值。
示例5:选择指定field key对应的具有最早时间戳的field value并包含多个子句
SELECT FIRST("water_level") FROM "h2o_feet" WHERE time >='2015-08-17T23:48:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
name: h2o_feet
tags: location=coyote_creek
time first
---------
2015-08-17T23:48:00Z9.01
2015-08-18T00:00:00Z8.12
2015-08-18T00:12:00Z7.887
2015-08-18T00:24:00Z7.635
该查询返回measurement h2o_feet
中field key water_level
对应的具有最早时间戳的field value,它涵盖的时间范围在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之间,并将查询结果按12分钟的时间间隔和每个tag进行分组,同时,该查询用9.01
填充没有数据的时间间隔,并将返回的数据点个数和序列个数分别限制为4和1。
GROUP BY time()
子句会覆盖数据点的原始时间戳。查询结果中的时间戳表示每12分钟时间间隔的开始时间,其中,第一个数据点涵盖的时间间隔在2015-08-17T23:48:00Z
和2015-08-18T00:00:00Z
之间,最后一个数据点涵盖的时间间隔在2015-08-18T00:24:00Z
和2015-08-18T00:36:00Z
之间。
LAST()
返回具有最新时间戳的field value。
语法
SELECT LAST(<field_key>)[,<tag_key(s)>|<field_keys(s)>][INTO_clause] FROM_clause [WHERE_clause][GROUP_BY_clause][ORDER_BY_clause][LIMIT_clause][OFFSET_clause][SLIMIT_clause][SOFFSET_clause]
语法说明
LAST(field_key)
:返回field key对应的具有最新时间戳的field value。
LAST(/regular_expression/)
:返回与正则表达式匹配的每个field key对应的具有最新时间戳的field value。
LAST(*)
:返回在measurement中每个field key对应的具有最新时间戳的field value。
LAST(field_key),tag_key(s),field_key(s)
:返回括号中的field key对应的具有最新时间戳的field value,以及相关的tag和/或field。
LAST()
:支持所有数据类型的field value。
示例1:选择指定field key对应的具有最新时间戳的field value
SELECT LAST("level description") FROM "h2o_feet"
name: h2o_feet
time last
--------
2015-09-18T21:42:00Z between 3 and 6 feet
该查询返回measurement h2o_feet
中field key level description
对应的具有最新时间戳的field value。
示例2:选择measurement中每个field key对应的具有最新时间戳的field value
SELECT LAST(*) FROM "h2o_feet"
name: h2o_feet
time last_level description last_water_level
--------------------------------------------
2015-09-18T21:42:00Z between 3 and 6 feet 4.938
该查询返回measurement h2o_feet
中每个field key对应的具有最新时间戳的field value。measurement h2o_feet
中有两个field key:level description
和water_level
。
示例3:选择与正则表达式匹配的每个field key对应的具有最新时间戳的field value
SELECT LAST(/level/) FROM "h2o_feet"
name: h2o_feet
time last_level description last_water_level
--------------------------------------------
2015-09-18T21:42:00Z between 3 and 6 feet 4.938
该查询返回measurement h2o_feet
中每个包含单词level
的field key对应的具有最新时间戳的field value。
示例4:选择指定field key对应的具有最新时间戳的field value以及相关的tag和field
SELECT LAST("level description"),"location","water_level" FROM "h2o_feet"
name: h2o_feet
time last location water_level
---------------------------
2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938
该查询返回measurement h2o_feet
中field key level description
对应的具有最新时间戳的field value,以及相关的tag key location
和field key water_level
的值。
示例5:选择指定field key对应的具有最新时间戳的field value并包含多个子句
SELECT LAST("water_level") FROM "h2o_feet" WHERE time >='2015-08-17T23:48:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
name: h2o_feet
tags: location=coyote_creek
time last
--------
2015-08-17T23:48:00Z9.01
2015-08-18T00:00:00Z8.005
2015-08-18T00:12:00Z7.762
2015-08-18T00:24:00Z7.5
该查询返回measurement h2o_feet
中field key water_level
对应的具有最新时间戳的field value,它涵盖的时间范围在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之间,并将查询结果按12分钟的时间间隔和每个tag进行分组,同时,该查询用9.01
填充没有数据的时间间隔,并将返回的数据点个数和序列个数分别限制为4和1。
GROUP BY time()
子句会覆盖数据点的原始时间戳。查询结果中的时间戳表示每12分钟时间间隔的开始时间,其中,第一个数据点涵盖的时间间隔在2015-08-17T23:48:00Z
和2015-08-18T00:00:00Z
之间,最后一个数据点涵盖的时间间隔在2015-08-18T00:24:00Z
和2015-08-18T00:36:00Z
之间。
MAX()
返回field value的最大值。
语法
SELECT MAX(<field_key>)[,<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]
语法说明
MAX(field_key)
:返回field key对应的field value的最大值。
MAX(/regular_expression/)
:返回与正则表达式匹配的每个field key对应的field value的最大值。
MAX(*)
:返回在measurement中每个field key对应的field value的最大值。
MAX(field_key),tag_key(s),field_key(s)
:返回括号中的field key对应的field value的最大值,以及相关的tag和/或field。
MAX()
:支持数据类型为int64和float64的field value。
示例1:选择指定field key对应的field value的最大值
SELECT MAX("water_level") FROM "h2o_feet"
name: h2o_feet
time max
-------
2015-08-29T07:24:00Z9.964
该查询返回measurement h2o_feet
中field key water_level
对应的field value的最大值。
示例2:选择measurement中每个field key对应的field value的最大值
SELECT MAX(*) FROM "h2o_feet"
name: h2o_feet
time max_water_level
-------------------
2015-08-29T07:24:00Z9.964
该查询返回measurement h2o_feet
中每个存储数值的field key对应的field value的最大值。measurement h2o_feet
中只有一个数值类型的field:water_level
。
示例3:选择与正则表达式匹配的每个field key对应的field value的最大值
SELECT MAX(/water/) FROM "h2o_feet"
name: h2o_feet
time max_water_level
-------------------
2015-08-29T07:24:00Z9.964
该查询返回measurement h2o_feet
中每个存储数值并包含单词water
的field key对应的field value的最大值。
示例4:选择指定field key对应的field value的最大值以及相关的tag和field
SELECT MAX("water_level"),"location","level description" FROM "h2o_feet"
name: h2o_feet
time max location level description
--------------------------------
2015-08-29T07:24:00Z9.964 coyote_creek at or greater than 9 feet
该查询返回measurement h2o_feet
中field key water_level
对应的field value的最大值,以及相关的tag key location
和field key level description
的值。
示例5:选择指定field key对应的field value的最大值并包含多个子句
SELECT MAX("water_level") FROM "h2o_feet" WHERE time >='2015-08-17T23:48:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
name: h2o_feet
tags: location=coyote_creek
time max
-------
2015-08-17T23:48:00Z9.01
2015-08-18T00:00:00Z8.12
2015-08-18T00:12:00Z7.887
2015-08-18T00:24:00Z7.635
该查询返回measurement h2o_feet
中field key water_level
对应的field value的最大值,它涵盖的时间范围在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之间,并将查询结果按12分钟的时间间隔和每个tag进行分组,同时,该查询用9.01
填充没有数据的时间间隔,并将返回的数据点个数和序列个数分别限制为4和1。
GROUP BY time()
子句会覆盖数据点的原始时间戳。查询结果中的时间戳表示每12分钟时间间隔的开始时间,其中,第一个数据点涵盖的时间间隔在2015-08-17T23:48:00Z
和2015-08-18T00:00:00Z
之间,最后一个数据点涵盖的时间间隔在2015-08-18T00:24:00Z
和2015-08-18T00:36:00Z
之间。
MIN()
返回field value的最小值。
语法
SELECT MIN(<field_key>)[,<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]
语法说明
MIN(field_key)
:返回field key对应的field value的最小值。
MIN(/regular_expression/)
:返回与正则表达式匹配的每个field key对应的field value的最小值。
MIN(*)
:返回在measurement中每个field key对应的field value的最小值。
MIN(field_key),tag_key(s),field_key(s)
:返回括号中的field key对应的field value的最小值,以及相关的tag和/或field。
MIN()
:支持数据类型为int64和float64的field value。
示例1:选择指定field key对应的field value的最小值
SELECT MIN("water_level") FROM "h2o_feet"
name: h2o_feet
time min
-------
2015-08-29T14:30:00Z-0.61
该查询返回measurement h2o_feet
中field key water_level
对应的field value的最小值。
示例2:选择measurement中每个field key对应的field value的最小值
SELECT MIN(*) FROM "h2o_feet"
name: h2o_feet
time min_water_level
-------------------
2015-08-29T14:30:00Z-0.61
该查询返回measurement h2o_feet
中每个存储数值的field key对应的field value的最小值。measurement h2o_feet
中只有一个数值类型的field:water_level
。
示例3:选择与正则表达式匹配的每个field key对应的field value的最小值
SELECT MIN(/water/) FROM "h2o_feet"
name: h2o_feet
time min_water_level
-------------------
2015-08-29T14:30:00Z-0.61
该查询返回measurement h2o_feet
中每个存储数值并包含单词water
的field key对应的field value的最小值。
示例4:选择指定field key对应的field value的最小值以及相关的tag和field
SELECT MIN("water_level"),"location","level description" FROM "h2o_feet"
name: h2o_feet
time min location level description
--------------------------------
2015-08-29T14:30:00Z-0.61 coyote_creek below 3 feet
该查询返回measurement h2o_feet
中field key water_level
对应的field value的最小值,以及相关的tag key location
和field key level description
的值。
示例5:选择指定field key对应的field value的最小值并包含多个子句
SELECT MIN("water_level") FROM "h2o_feet" WHERE time >='2015-08-17T23:48:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
name: h2o_feet
tags: location=coyote_creek
time min
-------
2015-08-17T23:48:00Z9.01
2015-08-18T00:00:00Z8.005
2015-08-18T00:12:00Z7.762
2015-08-18T00:24:00Z7.5
该查询返回measurement h2o_feet
中field key water_level
对应的field value的最小值,它涵盖的时间范围在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之间,并将查询结果按12分钟的时间间隔和每个tag进行分组,同时,该查询用9.01
填充没有数据的时间间隔,并将返回的数据点个数和序列个数分别限制为4和1。
GROUP BY time()
子句会覆盖数据点的原始时间戳。查询结果中的时间戳表示每12分钟时间间隔的开始时间,其中,第一个数据点涵盖的时间间隔在2015-08-17T23:48:00Z
和2015-08-18T00:00:00Z
之间,最后一个数据点涵盖的时间间隔在2015-08-18T00:24:00Z
和2015-08-18T00:36:00Z
之间。
PERCENTILE()
返回第N个百分位数的field value。
语法
SELECT PERCENTILE(<field_key>,<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]
语法说明
PERCENTILE(field_key,N)
:返回指定field key对应的第N个百分位数的field value。
PERCENTILE(/regular_expression/,N)
:返回与正则表达式匹配的每个field key对应的第N个百分位数的field value。
PERCENTILE(*,N)
:返回在measurement中每个field key对应的第N个百分位数的field value。
PERCENTILE(field_key,N),tag_key(s),field_key(s)
:返回括号中的field key对应的第N个百分位数的field value,以及相关的tag和/或field。N
必须是0到100之间的整数或浮点数。PERCENTILE()
支持数据类型为int64和float64的field value。
示例1:选择指定field key对应的第五个百分位数的field value
SELECT PERCENTILE("water_level",5) FROM "h2o_feet"
name: h2o_feet
time percentile
--------------
2015-08-31T03:42:00Z1.122
该查询返回的field value大于measurement h2o_feet
中field key water_level
对应的所有field value中的百分之五。
示例2:选择measurement中每个field key对应的第五个百分位数的field value
SELECT PERCENTILE(*,5) FROM "h2o_feet"
name: h2o_feet
time percentile_water_level
--------------------------
2015-08-31T03:42:00Z1.122
该查询返回的field value大于measurement h2o_feet
中每个存储数值的field key对应的所有field value中的百分之五。measurement h2o_feet
中只有一个数值类型的field:water_level
。
示例3:选择与正则表达式匹配的每个field key对应的第五个百分位数的field value
SELECT PERCENTILE(/water/,5) FROM "h2o_feet"
name: h2o_feet
time percentile_water_level
--------------------------
2015-08-31T03:42:00Z1.122
该查询返回的field value大于measurement h2o_feet
中每个存储数值并包含单词water
的field key对应的所有field value中的百分之五。
示例4:选择指定field key对应的第五个百分位数的field value以及相关的tag和field
SELECT PERCENTILE("water_level",5),"location","level description" FROM "h2o_feet"
name: h2o_feet
time percentile location level description
---------------------------------------
2015-08-31T03:42:00Z1.122 coyote_creek below 3 feet
该查询返回的field value大于measurement h2o_feet
中field key water_level
对应的所有field value中的百分之五,以及相关的tag key location
和field key level description
的值。
示例五:选择指定field key对应的第20个百分位数的field value并包含多个子句
SELECT PERCENTILE("water_level",20) FROM "h2o_feet" WHERE time >='2015-08-17T23:48:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(24m) fill(15) LIMIT 2
name: h2o_feet
time percentile
--------------
2015-08-17T23:36:00Z15
2015-08-18T00:00:00Z2.064
该查询返回的field value大于measurement h2o_feet
中field key water_level
对应的所有field value中的百分之二十,它涵盖的时间范围在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之间,并将查询结果按24分钟的时间间隔进行分组,同时,该查询用15
填充没有数据的时间间隔,并将返回的数据点个数限制为2。
GROUP BY time()
子句会覆盖数据点的原始时间戳。查询结果中的时间戳表示每24分钟时间间隔的开始时间,其中,第一个数据点涵盖的时间间隔在2015-08-17T23:36:00Z
和2015-08-18T00:00:00Z
之间,最后一个数据点涵盖的时间间隔在2015-08-18T00:00:00Z
和2015-08-18T00:24:00Z
之间。
PERCENTILE()的常见问题
问题一:PERCENTILE()与其它InfluxQL函数进行对比
PERCENTILE(<field_key>,100)
相当于MAX(<field_key>)
。PERCENTILE(<field_key>, 50)
近似于MEDIAN(<field_key>)
,除非field key包含的field value有偶数个,那么这时候MEDIAN()
将返回两个中间值的平均数。PERCENTILE(<field_key>,0)
不等于MIN(<field_key>)
,PERCENTILE(<field_key>,0)
会返回null
。
SAMPLE()
返回包含N个field value的随机样本。SAMPLE()
使用reservoir sampling来生成随机数据点。
语法
SELECT SAMPLE(<field_key>,<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]
语法说明
SAMPLE(field_key,N)
:返回指定field key对应的N个随机选择的field value。
SAMPLE(/regular_expression/,N)
:返回与正则表达式匹配的每个field key对应的N个随机选择的field value。
SAMPLE(*,N)
:返回在measurement中每个field key对应的N个随机选择的field value。
SAMPLE(field_key,N),tag_key(s),field_key(s)
:返回括号中的field key对应的N个随机选择的field value,以及相关的tag和/或field。N
必须是整数。SAMPLE()
支持所有数据类型的field value。
示例1:选择指定field key对应的field value的随机样本
SELECT SAMPLE("water_level",2) FROM "h2o_feet"
name: h2o_feet
time sample
----------
2015-09-09T21:48:00Z5.659
2015-09-18T10:00:00Z6.939
该查询返回measurement h2o_feet
中field key water_level
对应的两个随机选择的数据点。
示例2:选择measurement中每个field key对应的field value的随机样本
SELECT SAMPLE(*,2) FROM "h2o_feet"
name: h2o_feet
time sample_level description sample_water_level
----------------------------------------------
2015-08-25T17:06:00Z3.284
2015-09-03T04:30:00Z below 3 feet
2015-09-03T20:06:00Z between 3 and 6 feet
2015-09-08T21:54:00Z3.412
该查询返回measurement h2o_feet
中每个field key对应的两个随机选择的数据点。measurement h2o_feet
中有两个field key:level description
和water_level
。
示例3:选择与正则表达式匹配的每个field key对应的field value的随机样本
SELECT SAMPLE(/level/,2) FROM "h2o_feet"
name: h2o_feet
time sample_level description sample_water_level
----------------------------------------------
2015-08-30T05:54:00Z between 6 and 9 feet
2015-09-07T01:18:00Z7.854
2015-09-09T20:30:00Z7.32
2015-09-13T19:18:00Z between 3 and 6 feet
该查询返回measurement h2o_feet
中每个包含单词level
的field key对应的两个随机选择的数据点。
示例4:选择指定field key对应的field value的随机样本以及相关的tag和field
SELECT SAMPLE("water_level",2),"location","level description" FROM "h2o_feet"
name: h2o_feet
time sample location level description
-----------------------------------
2015-08-29T10:54:00Z5.689 coyote_creek between 3 and 6 feet
2015-09-08T15:48:00Z6.391 coyote_creek between 6 and 9 feet
该查询返回measurement h2o_feet
中field key water_level
对应的两个随机选择的数据点,以及相关的tag key location
和field key level description
的值。
示例5:选择指定field key对应field value的随机样本并包含多个子句
SELECT SAMPLE("water_level",1) FROM "h2o_feet" WHERE time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:30:00Z' AND "location"='santa_monica' GROUP BY time(18m)
name: h2o_feet
time sample
----------
2015-08-18T00:12:00Z2.028
2015-08-18T00:30:00Z2.051
该查询返回measurement h2o_feet
中field key water_level
对应的一个随机选择的数据点,它涵盖的时间范围在2015-08-18T00:00:00Z
和2015-08-18T00:30:00Z
之间,并将查询结果按18分钟的时间间隔进行分组。
GROUP BY time()
子句不会覆盖数据点的原始时间戳。
SAMPLE()的常见问题
问题一:SAMPLE()和GROUP BY time()子句同时使用
对于同时带有SAMPLE()
和GROUP BY time()
子句的查询,将返回每个GROUP BY time()
时间间隔的指定个数(N
)的数据点。对于大多数GROUP BY time()
查询,返回的时间戳表示GROUP BY time()
时间间隔的开始时间,但是,带有SAMPLE()
函数的GROUP BY time()
查询则不一样,它们保留原始数据点的时间戳。
示例:以下查询返回每18分钟GROUP BY time()
间隔对应的两个随机选择的数据点。请注意,返回的时间戳是数据点的原始时间戳;它们不会被强制要求必须匹配GROUP BY time()
间隔的开始时间。
SELECT SAMPLE("water_level",2) FROM "h2o_feet" WHERE time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:30:00Z' AND "location"='santa_monica' GROUP BY time(18m)
name: h2o_feet
time sample
----------
__
2015-08-18T00:06:00Z2.116|
2015-08-18T00:12:00Z2.028|<-------Randomly-selected points for the first time interval
--
__
2015-08-18T00:18:00Z2.126|
2015-08-18T00:30:00Z2.051|<-------Randomly-selected points for the second time interval
--
TOP()
返回最大的N个field value。
语法
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]
语法说明
TOP(field_key,N)
:返回field key对应的最大的N个值。
TOP(field_key,tag_key(s),N)
:返回tag key的N个tag value对应的field key的最大值。
TOP(field_key,N),tag_key(s),field_key(s)
:返回括号中的field key对应的最大的N个值,以及相关的tag和/或field。
TOP()
:支持数据类型为int64和float64的field value。
如果最大值有两个或多个并且它们之间有关联,TOP()返回具有最早时间戳的field value。 当TOP()函数与INTO子句一起使用时,TOP()与其它InfluxQL函数不同。
示例1:选择指定field key对应的最大的三个值
SELECT TOP("water_level",3) FROM "h2o_feet"
name: h2o_feet
time top
-------
2015-08-29T07:18:00Z9.957
2015-08-29T07:24:00Z9.964
2015-08-29T07:30:00Z9.954
该查询返回measurement h2o_feet
中field key water_level
对应的最大的三个值。
示例2:选择两个tag对应的field key的最大值
SELECT TOP("water_level","location",2) FROM "h2o_feet"
name: h2o_feet
time top location
---------------
2015-08-29T03:54:00Z7.205 santa_monica
2015-08-29T07:24:00Z9.964 coyote_creek
该查询返回tag key location
的两个tag value对应的field key water_level
的最大值。
示例3:选择指定field key对应的最大的四个值以及相关的tag和field
SELECT TOP("water_level",4),"location","level description" FROM "h2o_feet"
name: h2o_feet
time top location level description
--------------------------------
2015-08-29T07:18:00Z9.957 coyote_creek at or greater than 9 feet
2015-08-29T07:24:00Z9.964 coyote_creek at or greater than 9 feet
2015-08-29T07:30:00Z9.954 coyote_creek at or greater than 9 feet
2015-08-29T07:36:00Z9.941 coyote_creek at or greater than 9 feet
该查询返回field key water_level
对应的最大的四个值,以及相关的tag key location
和field key level description
的值。
示例4:选择指定field key对应的最大的三个值并包含多个子句
SELECT TOP("water_level",3),"location" FROM "h2o_feet" WHERE time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(24m) ORDER BY time DESC
name: h2o_feet
time top location
---------------
2015-08-18T00:48:00Z7.11 coyote_creek
2015-08-18T00:54:00Z6.982 coyote_creek
2015-08-18T00:54:00Z2.054 santa_monica
2015-08-18T00:24:00Z7.635 coyote_creek
2015-08-18T00:30:00Z7.5 coyote_creek
2015-08-18T00:36:00Z7.372 coyote_creek
2015-08-18T00:00:00Z8.12 coyote_creek
2015-08-18T00:06:00Z8.005 coyote_creek
2015-08-18T00:12:00Z7.887 coyote_creek
该查询返回在2015-08-18T00:00:00Z
和2015-08-18T00:54:00Z
之间的每个24分钟间隔内,field key water_level
对应的最大的三个值,并且以递减的时间戳顺序返回结果。
GROUP BY time()
子句不会覆盖数据点的原始时间戳。
TOP()的常见问题
问题1:TOP()和GROUP BY time()子句同时使用
对于同时带有TOP()
和GROUP BY time()
子句的查询,将返回每个GROUP BY time()
时间间隔的指定个数的数据点。对于大多数GROUP BY time()
查询,返回的时间戳表示GROUP BY time()
时间间隔的开始时间,但是,带有TOP()
函数的GROUP BY time()
查询则不一样,它们保留原始数据点的时间戳。
示例:以下查询返回每18分钟GROUP BY time()
间隔对应的两个数据点。请注意,返回的时间戳是数据点的原始时间戳;它们不会被强制要求必须匹配GROUP BY time()
间隔的开始时间。
SELECT TOP("water_level",2) FROM "h2o_feet" WHERE time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:30:00Z' AND "location"='santa_monica' GROUP BY time(18m)
name: h2o_feet
time top
----------
__
2015-08-18T00:00:00Z2.064|
2015-08-18T00:06:00Z2.116|<-------Greatest points for the first time interval
--
__
2015-08-18T00:18:00Z2.126|
2015-08-18T00:30:00Z2.051|<-------Greatest points for the second time interval
--
问题2:TOP()和具有少于N个tag value的tag key
使用语法SELECT TOP(<field_key>,<tag_key>,<N>)
的查询可以返回比预期少的数据点。如果tag key有X
个tag value,但是查询指定的是N
个tag value,如果X
小于N
,那么查询将返回X
个数据点。
示例:以下查询请求的是tag key location
的三个tag value对于的water_level
的最大值。因为tag key location
只有两个tag value(santa_monica
和coyote_creek
),所以该查询返回两个数据点而不是三个。
> SELECT TOP("water_level","location",3) FROM "h2o_feet"
name: h2o_feet
time top location
---------------
2015-08-29T03:54:00Z7.205 santa_monica
2015-08-29T07:24:00Z9.964 coyote_creek
问题3:TOP()、tag和INTO子句
当使用INTO
子句但没有使用GROUP BY tag
子句时,大多数InfluxQL函数将原始数据中的tag转换为新写入数据中的field。这种行为同样适用于TOP()
函数,除非TOP()
中包含tag key作为参数:TOP(field_key,tag_key(s),N)
。在这些情况下,系统会将指定的tag保留为新写入数据中的tag。
示例:下面代码块中的第一个查询返回tag key location
的两个tag value对应的field key water_level
的最大值,并且,它这些结果写入measurement top_water_levels
中。第二个查询展示了TSDB For InfluxDB®将tag location
保留为measurement top_water_levels
中的tag。
SELECT TOP("water_level","location",2) INTO "top_water_levels" FROM "h2o_feet"
name: result
time written
-----------
1970-01-01T00:00:00Z2
> SHOW TAG KEYS FROM "top_water_levels"
name: top_water_levels
tagKey
------
location