選擇函數(shù)
本文檔主要介紹了選擇函數(shù)(Selectors)的語法結(jié)構(gòu)、語法說明以及使用示例。
BOTTOM()
返回最小的N個(gè)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對應(yīng)的最小的N個(gè)值。
BOTTOM(field_key,tag_key(s),N)
:返回tag key的N個(gè)tag value對應(yīng)的field key的最小值。
BOTTOM(field_key,N),tag_key(s),field_key(s)
:返回括號中的field key對應(yīng)的最小的N個(gè)值,以及相關(guān)的tag和/或field。
BOTTOM()
:支持?jǐn)?shù)據(jù)類型為int64和float64的field value。
如果最小值有兩個(gè)或多個(gè)相等的值,BOTTOM()返回具有最早時(shí)間戳的field value。當(dāng)BOTTOM()函數(shù)與INTO子句一起使用時(shí),BOTTOM()與其它InfluxQL函數(shù)不同。
示例1:選擇指定field key對應(yīng)的最小的三個(gè)值
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
對應(yīng)的最小的三個(gè)值。
示例2:選擇兩個(gè)tag對應(yīng)的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
的兩個(gè)tag value對應(yīng)的field key water_level
的最小值。
示例3:選擇指定field key對應(yīng)的最小的四個(gè)值以及相關(guān)的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
對應(yīng)的最小的四個(gè)值,以及相關(guān)的tag key location
和field key level description
的值。
示例4:選擇指定field key對應(yīng)的最小的三個(gè)值并包含多個(gè)子句
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
之間的每個(gè)24分鐘間隔內(nèi),field key water_level
對應(yīng)的最小的三個(gè)值,并且以遞減的時(shí)間戳順序返回結(jié)果。
GROUP BY time()
子句不會(huì)覆蓋數(shù)據(jù)點(diǎn)的原始時(shí)間戳。
BOTTOM()的常見問題
問題一:BOTTOM()和GROUP BY time()子句同時(shí)使用
對于同時(shí)帶有BOTTOM()
和GROUP BY time()
子句的查詢,將返回每個(gè)GROUP BY time()
時(shí)間間隔的指定個(gè)數(shù)的數(shù)據(jù)點(diǎn)。對于大多數(shù)GROUP BY time()
查詢,返回的時(shí)間戳表示GROUP BY time()
時(shí)間間隔的開始時(shí)間,但是,帶有BOTTOM()
函數(shù)的GROUP BY time()
查詢則不一樣,它們保留原始數(shù)據(jù)點(diǎn)的時(shí)間戳。
示例:以下查詢返回每18分鐘GROUP BY time()
間隔對應(yīng)的兩個(gè)數(shù)據(jù)點(diǎn)。請注意,返回的時(shí)間戳是數(shù)據(jù)點(diǎn)的原始時(shí)間戳;它們不會(huì)被強(qiáng)制要求必須匹配GROUP BY time()
間隔的開始時(shí)間。
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個(gè)tag value的tag key
使用語法SELECT BOTTOM(<field_key>,<tag_key>,<N>)
的查詢可以返回比預(yù)期少的數(shù)據(jù)點(diǎn)。如果tag key有X
個(gè)tag value,但是查詢指定的是N
個(gè)tag value,如果X
小于N
,那么查詢將返回X
個(gè)數(shù)據(jù)點(diǎn)。
示例:以下查詢請求的是tag key location
的三個(gè)tag value對于的water_level
的最小值。因?yàn)閠ag key location
只有兩個(gè)tag value(santa_monica
和coyote_creek
),所以該查詢返回兩個(gè)數(shù)據(jù)點(diǎn)而不是三個(gè)。
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子句
當(dāng)使用INTO
子句但沒有使用GROUP BY tag
子句時(shí),大多數(shù)InfluxQL函數(shù)將原始數(shù)據(jù)中的tag轉(zhuǎn)換為新寫入數(shù)據(jù)中的field。這種行為同樣適用于BOTTOM()
函數(shù)除非BOTTOM()
中包含tag key作為參數(shù):BOTTOM(field_key,tag_key(s),N)
。在這些情況下,系統(tǒng)會(huì)將指定的tag保留為新寫入數(shù)據(jù)中的tag。
示例:下面代碼塊中的第一個(gè)查詢返回tag key location
的兩個(gè)tag value對應(yīng)的field key water_level
的最小值,并且,它這些結(jié)果寫入measurement bottom_water_levels
中。第二個(gè)查詢展示了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()
返回具有最早時(shí)間戳的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對應(yīng)的具有最早時(shí)間戳的field value。
FIRST(/regular_expression/)
:返回與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的具有最早時(shí)間戳的field value。
FIRST(*)
:返回在measurement中每個(gè)field key對應(yīng)的具有最早時(shí)間戳的field value。
FIRST(field_key),tag_key(s),field_key(s)
:返回括號中的field key對應(yīng)的具有最早時(shí)間戳的field value,以及相關(guān)的tag和/或field。
FIRST()
:支持所有數(shù)據(jù)類型的field value。
示例1:選擇指定field key對應(yīng)的具有最早時(shí)間戳的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
對應(yīng)的具有最早時(shí)間戳的field value。
示例2:選擇measurement中每個(gè)field key對應(yīng)的具有最早時(shí)間戳的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
中每個(gè)field key對應(yīng)的具有最早時(shí)間戳的field value。measurement h2o_feet
中有兩個(gè)field key:level description
和water_level
。
示例3:選擇與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的具有最早時(shí)間戳的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
中每個(gè)包含單詞level
的field key對應(yīng)的具有最早時(shí)間戳的field value。
示例4:選擇指定field key對應(yīng)的具有最早時(shí)間戳的field value以及相關(guān)的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
對應(yīng)的具有最早時(shí)間戳的field value,以及相關(guān)的tag key location
和field key water_level
的值。
示例5:選擇指定field key對應(yīng)的具有最早時(shí)間戳的field value并包含多個(gè)子句
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
對應(yīng)的具有最早時(shí)間戳的field value,它涵蓋的時(shí)間范圍在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之間,并將查詢結(jié)果按12分鐘的時(shí)間間隔和每個(gè)tag進(jìn)行分組,同時(shí),該查詢用9.01
填充沒有數(shù)據(jù)的時(shí)間間隔,并將返回的數(shù)據(jù)點(diǎn)個(gè)數(shù)和序列個(gè)數(shù)分別限制為4和1。
GROUP BY time()
子句會(huì)覆蓋數(shù)據(jù)點(diǎn)的原始時(shí)間戳。查詢結(jié)果中的時(shí)間戳表示每12分鐘時(shí)間間隔的開始時(shí)間,其中,第一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在2015-08-17T23:48:00Z
和2015-08-18T00:00:00Z
之間,最后一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在2015-08-18T00:24:00Z
和2015-08-18T00:36:00Z
之間。
LAST()
返回具有最新時(shí)間戳的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對應(yīng)的具有最新時(shí)間戳的field value。
LAST(/regular_expression/)
:返回與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的具有最新時(shí)間戳的field value。
LAST(*)
:返回在measurement中每個(gè)field key對應(yīng)的具有最新時(shí)間戳的field value。
LAST(field_key),tag_key(s),field_key(s)
:返回括號中的field key對應(yīng)的具有最新時(shí)間戳的field value,以及相關(guān)的tag和/或field。
LAST()
:支持所有數(shù)據(jù)類型的field value。
示例1:選擇指定field key對應(yīng)的具有最新時(shí)間戳的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
對應(yīng)的具有最新時(shí)間戳的field value。
示例2:選擇measurement中每個(gè)field key對應(yīng)的具有最新時(shí)間戳的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
中每個(gè)field key對應(yīng)的具有最新時(shí)間戳的field value。measurement h2o_feet
中有兩個(gè)field key:level description
和water_level
。
示例3:選擇與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的具有最新時(shí)間戳的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
中每個(gè)包含單詞level
的field key對應(yīng)的具有最新時(shí)間戳的field value。
示例4:選擇指定field key對應(yīng)的具有最新時(shí)間戳的field value以及相關(guān)的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
對應(yīng)的具有最新時(shí)間戳的field value,以及相關(guān)的tag key location
和field key water_level
的值。
示例5:選擇指定field key對應(yīng)的具有最新時(shí)間戳的field value并包含多個(gè)子句
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
對應(yīng)的具有最新時(shí)間戳的field value,它涵蓋的時(shí)間范圍在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之間,并將查詢結(jié)果按12分鐘的時(shí)間間隔和每個(gè)tag進(jìn)行分組,同時(shí),該查詢用9.01
填充沒有數(shù)據(jù)的時(shí)間間隔,并將返回的數(shù)據(jù)點(diǎn)個(gè)數(shù)和序列個(gè)數(shù)分別限制為4和1。
GROUP BY time()
子句會(huì)覆蓋數(shù)據(jù)點(diǎn)的原始時(shí)間戳。查詢結(jié)果中的時(shí)間戳表示每12分鐘時(shí)間間隔的開始時(shí)間,其中,第一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在2015-08-17T23:48:00Z
和2015-08-18T00:00:00Z
之間,最后一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在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對應(yīng)的field value的最大值。
MAX(/regular_expression/)
:返回與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的field value的最大值。
MAX(*)
:返回在measurement中每個(gè)field key對應(yīng)的field value的最大值。
MAX(field_key),tag_key(s),field_key(s)
:返回括號中的field key對應(yīng)的field value的最大值,以及相關(guān)的tag和/或field。
MAX()
:支持?jǐn)?shù)據(jù)類型為int64和float64的field value。
示例1:選擇指定field key對應(yīng)的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
對應(yīng)的field value的最大值。
示例2:選擇measurement中每個(gè)field key對應(yīng)的field value的最大值
SELECT MAX(*) FROM "h2o_feet"
name: h2o_feet
time max_water_level
-------------------
2015-08-29T07:24:00Z9.964
該查詢返回measurement h2o_feet
中每個(gè)存儲數(shù)值的field key對應(yīng)的field value的最大值。measurement h2o_feet
中只有一個(gè)數(shù)值類型的field:water_level
。
示例3:選擇與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的field value的最大值
SELECT MAX(/water/) FROM "h2o_feet"
name: h2o_feet
time max_water_level
-------------------
2015-08-29T07:24:00Z9.964
該查詢返回measurement h2o_feet
中每個(gè)存儲數(shù)值并包含單詞water
的field key對應(yīng)的field value的最大值。
示例4:選擇指定field key對應(yīng)的field value的最大值以及相關(guān)的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
對應(yīng)的field value的最大值,以及相關(guān)的tag key location
和field key level description
的值。
示例5:選擇指定field key對應(yīng)的field value的最大值并包含多個(gè)子句
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
對應(yīng)的field value的最大值,它涵蓋的時(shí)間范圍在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之間,并將查詢結(jié)果按12分鐘的時(shí)間間隔和每個(gè)tag進(jìn)行分組,同時(shí),該查詢用9.01
填充沒有數(shù)據(jù)的時(shí)間間隔,并將返回的數(shù)據(jù)點(diǎn)個(gè)數(shù)和序列個(gè)數(shù)分別限制為4和1。
GROUP BY time()
子句會(huì)覆蓋數(shù)據(jù)點(diǎn)的原始時(shí)間戳。查詢結(jié)果中的時(shí)間戳表示每12分鐘時(shí)間間隔的開始時(shí)間,其中,第一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在2015-08-17T23:48:00Z
和2015-08-18T00:00:00Z
之間,最后一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在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對應(yīng)的field value的最小值。
MIN(/regular_expression/)
:返回與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的field value的最小值。
MIN(*)
:返回在measurement中每個(gè)field key對應(yīng)的field value的最小值。
MIN(field_key),tag_key(s),field_key(s)
:返回括號中的field key對應(yīng)的field value的最小值,以及相關(guān)的tag和/或field。
MIN()
:支持?jǐn)?shù)據(jù)類型為int64和float64的field value。
示例1:選擇指定field key對應(yīng)的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
對應(yīng)的field value的最小值。
示例2:選擇measurement中每個(gè)field key對應(yīng)的field value的最小值
SELECT MIN(*) FROM "h2o_feet"
name: h2o_feet
time min_water_level
-------------------
2015-08-29T14:30:00Z-0.61
該查詢返回measurement h2o_feet
中每個(gè)存儲數(shù)值的field key對應(yīng)的field value的最小值。measurement h2o_feet
中只有一個(gè)數(shù)值類型的field:water_level
。
示例3:選擇與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的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
中每個(gè)存儲數(shù)值并包含單詞water
的field key對應(yīng)的field value的最小值。
示例4:選擇指定field key對應(yīng)的field value的最小值以及相關(guān)的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
對應(yīng)的field value的最小值,以及相關(guān)的tag key location
和field key level description
的值。
示例5:選擇指定field key對應(yīng)的field value的最小值并包含多個(gè)子句
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
對應(yīng)的field value的最小值,它涵蓋的時(shí)間范圍在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之間,并將查詢結(jié)果按12分鐘的時(shí)間間隔和每個(gè)tag進(jìn)行分組,同時(shí),該查詢用9.01
填充沒有數(shù)據(jù)的時(shí)間間隔,并將返回的數(shù)據(jù)點(diǎn)個(gè)數(shù)和序列個(gè)數(shù)分別限制為4和1。
GROUP BY time()
子句會(huì)覆蓋數(shù)據(jù)點(diǎn)的原始時(shí)間戳。查詢結(jié)果中的時(shí)間戳表示每12分鐘時(shí)間間隔的開始時(shí)間,其中,第一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在2015-08-17T23:48:00Z
和2015-08-18T00:00:00Z
之間,最后一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在2015-08-18T00:24:00Z
和2015-08-18T00:36:00Z
之間。
PERCENTILE()
返回第N個(gè)百分位數(shù)的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對應(yīng)的第N個(gè)百分位數(shù)的field value。
PERCENTILE(/regular_expression/,N)
:返回與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的第N個(gè)百分位數(shù)的field value。
PERCENTILE(*,N)
:返回在measurement中每個(gè)field key對應(yīng)的第N個(gè)百分位數(shù)的field value。
PERCENTILE(field_key,N),tag_key(s),field_key(s)
:返回括號中的field key對應(yīng)的第N個(gè)百分位數(shù)的field value,以及相關(guān)的tag和/或field。N
必須是0到100之間的整數(shù)或浮點(diǎn)數(shù)。PERCENTILE()
支持?jǐn)?shù)據(jù)類型為int64和float64的field value。
示例1:選擇指定field key對應(yīng)的第五個(gè)百分位數(shù)的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
對應(yīng)的所有field value中的百分之五。
示例2:選擇measurement中每個(gè)field key對應(yīng)的第五個(gè)百分位數(shù)的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
中每個(gè)存儲數(shù)值的field key對應(yīng)的所有field value中的百分之五。measurement h2o_feet
中只有一個(gè)數(shù)值類型的field:water_level
。
示例3:選擇與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的第五個(gè)百分位數(shù)的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
中每個(gè)存儲數(shù)值并包含單詞water
的field key對應(yīng)的所有field value中的百分之五。
示例4:選擇指定field key對應(yīng)的第五個(gè)百分位數(shù)的field value以及相關(guān)的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
對應(yīng)的所有field value中的百分之五,以及相關(guān)的tag key location
和field key level description
的值。
示例五:選擇指定field key對應(yīng)的第20個(gè)百分位數(shù)的field value并包含多個(gè)子句
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
對應(yīng)的所有field value中的百分之二十,它涵蓋的時(shí)間范圍在2015-08-17T23:48:00Z
和2015-08-18T00:54:00Z
之間,并將查詢結(jié)果按24分鐘的時(shí)間間隔進(jìn)行分組,同時(shí),該查詢用15
填充沒有數(shù)據(jù)的時(shí)間間隔,并將返回的數(shù)據(jù)點(diǎn)個(gè)數(shù)限制為2。
GROUP BY time()
子句會(huì)覆蓋數(shù)據(jù)點(diǎn)的原始時(shí)間戳。查詢結(jié)果中的時(shí)間戳表示每24分鐘時(shí)間間隔的開始時(shí)間,其中,第一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在2015-08-17T23:36:00Z
和2015-08-18T00:00:00Z
之間,最后一個(gè)數(shù)據(jù)點(diǎn)涵蓋的時(shí)間間隔在2015-08-18T00:00:00Z
和2015-08-18T00:24:00Z
之間。
PERCENTILE()的常見問題
問題一:PERCENTILE()與其它InfluxQL函數(shù)進(jìn)行對比
PERCENTILE(<field_key>,100)
相當(dāng)于MAX(<field_key>)
。PERCENTILE(<field_key>, 50)
近似于MEDIAN(<field_key>)
,除非field key包含的field value有偶數(shù)個(gè),那么這時(shí)候MEDIAN()
將返回兩個(gè)中間值的平均數(shù)。PERCENTILE(<field_key>,0)
不等于MIN(<field_key>)
,PERCENTILE(<field_key>,0)
會(huì)返回null
。
SAMPLE()
返回包含N個(gè)field value的隨機(jī)樣本。SAMPLE()
使用reservoir sampling來生成隨機(jī)數(shù)據(jù)點(diǎn)。
語法
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對應(yīng)的N個(gè)隨機(jī)選擇的field value。
SAMPLE(/regular_expression/,N)
:返回與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的N個(gè)隨機(jī)選擇的field value。
SAMPLE(*,N)
:返回在measurement中每個(gè)field key對應(yīng)的N個(gè)隨機(jī)選擇的field value。
SAMPLE(field_key,N),tag_key(s),field_key(s)
:返回括號中的field key對應(yīng)的N個(gè)隨機(jī)選擇的field value,以及相關(guān)的tag和/或field。N
必須是整數(shù)。SAMPLE()
支持所有數(shù)據(jù)類型的field value。
示例1:選擇指定field key對應(yīng)的field value的隨機(jī)樣本
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
對應(yīng)的兩個(gè)隨機(jī)選擇的數(shù)據(jù)點(diǎn)。
示例2:選擇measurement中每個(gè)field key對應(yīng)的field value的隨機(jī)樣本
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
中每個(gè)field key對應(yīng)的兩個(gè)隨機(jī)選擇的數(shù)據(jù)點(diǎn)。measurement h2o_feet
中有兩個(gè)field key:level description
和water_level
。
示例3:選擇與正則表達(dá)式匹配的每個(gè)field key對應(yīng)的field value的隨機(jī)樣本
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
中每個(gè)包含單詞level
的field key對應(yīng)的兩個(gè)隨機(jī)選擇的數(shù)據(jù)點(diǎn)。
示例4:選擇指定field key對應(yīng)的field value的隨機(jī)樣本以及相關(guān)的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
對應(yīng)的兩個(gè)隨機(jī)選擇的數(shù)據(jù)點(diǎn),以及相關(guān)的tag key location
和field key level description
的值。
示例5:選擇指定field key對應(yīng)field value的隨機(jī)樣本并包含多個(gè)子句
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
對應(yīng)的一個(gè)隨機(jī)選擇的數(shù)據(jù)點(diǎn),它涵蓋的時(shí)間范圍在2015-08-18T00:00:00Z
和2015-08-18T00:30:00Z
之間,并將查詢結(jié)果按18分鐘的時(shí)間間隔進(jìn)行分組。
GROUP BY time()
子句不會(huì)覆蓋數(shù)據(jù)點(diǎn)的原始時(shí)間戳。
SAMPLE()的常見問題
問題一:SAMPLE()和GROUP BY time()子句同時(shí)使用
對于同時(shí)帶有SAMPLE()
和GROUP BY time()
子句的查詢,將返回每個(gè)GROUP BY time()
時(shí)間間隔的指定個(gè)數(shù)(N
)的數(shù)據(jù)點(diǎn)。對于大多數(shù)GROUP BY time()
查詢,返回的時(shí)間戳表示GROUP BY time()
時(shí)間間隔的開始時(shí)間,但是,帶有SAMPLE()
函數(shù)的GROUP BY time()
查詢則不一樣,它們保留原始數(shù)據(jù)點(diǎn)的時(shí)間戳。
示例:以下查詢返回每18分鐘GROUP BY time()
間隔對應(yīng)的兩個(gè)隨機(jī)選擇的數(shù)據(jù)點(diǎn)。請注意,返回的時(shí)間戳是數(shù)據(jù)點(diǎn)的原始時(shí)間戳;它們不會(huì)被強(qiáng)制要求必須匹配GROUP BY time()
間隔的開始時(shí)間。
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個(gè)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對應(yīng)的最大的N個(gè)值。
TOP(field_key,tag_key(s),N)
:返回tag key的N個(gè)tag value對應(yīng)的field key的最大值。
TOP(field_key,N),tag_key(s),field_key(s)
:返回括號中的field key對應(yīng)的最大的N個(gè)值,以及相關(guān)的tag和/或field。
TOP()
:支持?jǐn)?shù)據(jù)類型為int64和float64的field value。
如果最大值有兩個(gè)或多個(gè)并且它們之間有關(guān)聯(lián),TOP()返回具有最早時(shí)間戳的field value。 當(dāng)TOP()函數(shù)與INTO子句一起使用時(shí),TOP()與其它InfluxQL函數(shù)不同。
示例1:選擇指定field key對應(yīng)的最大的三個(gè)值
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
對應(yīng)的最大的三個(gè)值。
示例2:選擇兩個(gè)tag對應(yīng)的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
的兩個(gè)tag value對應(yīng)的field key water_level
的最大值。
示例3:選擇指定field key對應(yīng)的最大的四個(gè)值以及相關(guān)的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
對應(yīng)的最大的四個(gè)值,以及相關(guān)的tag key location
和field key level description
的值。
示例4:選擇指定field key對應(yīng)的最大的三個(gè)值并包含多個(gè)子句
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
之間的每個(gè)24分鐘間隔內(nèi),field key water_level
對應(yīng)的最大的三個(gè)值,并且以遞減的時(shí)間戳順序返回結(jié)果。
GROUP BY time()
子句不會(huì)覆蓋數(shù)據(jù)點(diǎn)的原始時(shí)間戳。
TOP()的常見問題
問題1:TOP()和GROUP BY time()子句同時(shí)使用
對于同時(shí)帶有TOP()
和GROUP BY time()
子句的查詢,將返回每個(gè)GROUP BY time()
時(shí)間間隔的指定個(gè)數(shù)的數(shù)據(jù)點(diǎn)。對于大多數(shù)GROUP BY time()
查詢,返回的時(shí)間戳表示GROUP BY time()
時(shí)間間隔的開始時(shí)間,但是,帶有TOP()
函數(shù)的GROUP BY time()
查詢則不一樣,它們保留原始數(shù)據(jù)點(diǎn)的時(shí)間戳。
示例:以下查詢返回每18分鐘GROUP BY time()
間隔對應(yīng)的兩個(gè)數(shù)據(jù)點(diǎn)。請注意,返回的時(shí)間戳是數(shù)據(jù)點(diǎn)的原始時(shí)間戳;它們不會(huì)被強(qiáng)制要求必須匹配GROUP BY time()
間隔的開始時(shí)間。
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個(gè)tag value的tag key
使用語法SELECT TOP(<field_key>,<tag_key>,<N>)
的查詢可以返回比預(yù)期少的數(shù)據(jù)點(diǎn)。如果tag key有X
個(gè)tag value,但是查詢指定的是N
個(gè)tag value,如果X
小于N
,那么查詢將返回X
個(gè)數(shù)據(jù)點(diǎn)。
示例:以下查詢請求的是tag key location
的三個(gè)tag value對于的water_level
的最大值。因?yàn)閠ag key location
只有兩個(gè)tag value(santa_monica
和coyote_creek
),所以該查詢返回兩個(gè)數(shù)據(jù)點(diǎn)而不是三個(gè)。
> 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子句
當(dāng)使用INTO
子句但沒有使用GROUP BY tag
子句時(shí),大多數(shù)InfluxQL函數(shù)將原始數(shù)據(jù)中的tag轉(zhuǎn)換為新寫入數(shù)據(jù)中的field。這種行為同樣適用于TOP()
函數(shù),除非TOP()
中包含tag key作為參數(shù):TOP(field_key,tag_key(s),N)
。在這些情況下,系統(tǒng)會(huì)將指定的tag保留為新寫入數(shù)據(jù)中的tag。
示例:下面代碼塊中的第一個(gè)查詢返回tag key location
的兩個(gè)tag value對應(yīng)的field key water_level
的最大值,并且,它這些結(jié)果寫入measurement top_water_levels
中。第二個(gè)查詢展示了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