非官方:InfluxDB 基本命令操做文檔html
原地址:https://docs.influxdata.com/influxdb/v1.6/query_language/data_exploration/#order-by-time-descgit
警告!此頁面記錄了再也不積極開發的InfluxDB的早期版本。InfluxDB v1.7是InfluxDB的最新穩定版本。github
InfluxQL是一種相似SQL的查詢語言,用於與InfluxDB中的數據進行交互。如下部分詳細介紹了InfluxQL SELECT
用於探索數據的語句和有用的查詢語法。golang
基礎: | 配置查詢結果: | 查詢語法的通常提示: |
SELECT語句 | 按時間順序DESC | 時間語法 |
WHERE子句 | LIMIT和SLIMIT條款 | 經常使用表達 |
GROUP BY子句 | OFFSET和SOFFSET條款 | 數據類型和強制轉換操做 |
INTO條款 | 時區條款 | 合併行爲 |
多個陳述 | ||
子查詢 |
本文件使用來自國家海洋和大氣管理局(NOAA)運行海洋學產品和服務中心的公開數據 。請參閱「 示例數據」頁面如下載數據,並按照如下部分中的示例查詢進行操做。正則表達式
首先登陸Influx CLI:sql
$ influx -precision rfc3339 -database NOAA_water_database
Connected to http://localhost:8086 version 1.6.x InfluxDB shell 1.6.x >
接下來,熟悉h2o_feet
測量中數據的這個子樣本:shell
名稱:數據庫
h2o_feetexpress
時間 |
|
|
|
---|---|---|---|
2015-08-18T00:00:00Z | 在6到9英尺之間 | coyote_creek | 8.12 |
2015-08-18T00:00:00Z | 低於3英尺 | 聖莫妮卡 | 2.064 |
|
|
|
|
2015-08-18T00:06:00Z | 低於3英尺 | 聖莫妮卡 | 2.116 |
2015-08-18T00:12:00Z | 在6到9英尺之間 | coyote_creek | 7.887 |
2015-08-18T00:12:00Z | 低於3英尺 | 聖莫妮卡 | 2.028 |
h2o_feet
測量數據 以六分鐘的時間間隔發生。測量有一個標籤鍵 (location
),它有兩個標籤值:coyote_creek
和santa_monica
。測量還有兩個字段: level description
存儲字符串字段值 並water_level
存儲浮點字段值。全部這些數據都在NOAA_water_database
數據庫中。api
免責聲明:該
level description
字段不是原始NOAA數據的一部分 - 爲了擁有一個具備特殊字符和字符串字段值的字段鍵,咱們將其隱藏在那裏。
該SELECT
語句查詢來自特定測量或測量的數據。
SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]
該SELECT
聲明須要一個SELECT
條款和一個FROM
條款。
SELECT
條款該SELECT
子句支持多種指定數據的格式:
SELECT "<field_key>"
返回特定字段。
SELECT "<field_key>","<field_key>"
返回多個字段。
SELECT "<field_key>","<tag_key>"
返回特定的字段和標記。該SELECT
子句在包含標記時必須至少指定一個字段。
SELECT "<field_key>"::field,"<tag_key>"::tag
返回特定的字段和標記。的::[field | tag]
語法指定的標識符的類型。使用此語法可區分具備相同名稱的字段鍵和標記鍵。
其餘支持的功能: 算術運算, 函數, 基本轉換運算, 正則表達式
FROM
條款該FROM
子句支持幾種用於指定測量的格式:
FROM <measurement_name>
從單個測量返回數據。若是您正在使用CLI InfluxDB,請查詢USE
d 數據庫中的度量 和DEFAULT
保留策略。若是您正在使用HTTP API InfluxDB,則db
查詢查詢字符串參數 和DEFAULT
保留策略中指定的數據庫中的度量。
FROM <measurement_name>,<measurement_name>
從多個度量返回數據。
FROM <database_name>.<retention_policy_name>.<measurement_name>
從徹底限定的度量返回數據。經過指定其數據庫和保留策略來徹底限定測量。
FROM <database_name>..<measurement_name>
從用戶指定的數據庫中的度量和DEFAULT
保留策略返回數據。
其餘支持的功能: 正則表達式
若是標識符包含除了數字以外的字符,或者若是它們是InfluxQL關鍵字,則必須使用雙引號。雖然並不是老是必要,但咱們建議您使用雙引號標識符。[A-z,0-9,_]
> SELECT * FROM "h2o_feet" name: h2o_feet -------------- time level description location water_level 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12 [...] 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938
若是您使用的是CLI,請確保USE NOAA_water_database
在運行查詢以前輸入 。CLI查詢USE
d數據庫中的數據和 DEFAULT
保留策略。若是您正在使用HTTP API,請確保將db
查詢字符串參數設置 爲NOAA_water_database
。若是未設置rp
查詢字符串參數,HTTP API將自動查詢數據庫的DEFAULT
保留策略。
> SELECT "level description","location","water_level" FROM "h2o_feet" name: h2o_feet -------------- time level description location water_level 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12 [...] 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938
查詢選擇level description
字段,location
標記和 water_level
字段。請注意,該SELECT
子句在包含標記時必須至少指定一個字段。
> SELECT "level description"::field,"location"::tag,"water_level"::field FROM "h2o_feet" name: h2o_feet -------------- time level description location water_level 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12 [...] 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938
查詢從測量中選擇level description
字段,location
標記和 water_level
字段h2o_feet
。的::[field | tag]
語法指定若是 標識符是一個字段或標記。使用::[field | tag]
區分相同的場密鑰和標記關鍵。大多數用例不須要該語法。
> SELECT *::field FROM "h2o_feet" name: h2o_feet -------------- time level description water_level 2015-08-18T00:00:00Z below 3 feet 2.064 2015-08-18T00:00:00Z between 6 and 9 feet 8.12 [...] 2015-09-18T21:36:00Z between 3 and 6 feet 5.066 2015-09-18T21:42:00Z between 3 and 6 feet 4.938
查詢選擇h2o_feet
測量中的全部字段。該SELECT
子句支持將*
語法與::
語法相結合。
> SELECT ("water_level" * 2) + 4 from "h2o_feet" name: h2o_feet -------------- time water_level 2015-08-18T00:00:00Z 20.24 2015-08-18T00:00:00Z 8.128 [...] 2015-09-18T21:36:00Z 14.132 2015-09-18T21:42:00Z 13.876
查詢將water_level
字段值乘以2,並將這些值加4。請注意,InfluxDB遵循標準操做順序。有關 支持的運算符的更多信息,請參見數學運算符
> SELECT * FROM "h2o_feet","h2o_pH" name: h2o_feet -------------- time level description location pH water_level 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12 [...] 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938 name: h2o_pH ------------ time level description location pH water_level 2015-08-18T00:00:00Z santa_monica 6 2015-08-18T00:00:00Z coyote_creek 7 [...] 2015-09-18T21:36:00Z santa_monica 8 2015-09-18T21:42:00Z santa_monica 7
查詢從兩個測量中選擇全部字段和標記:h2o_feet
和 h2o_pH
。使用逗號(,
)分隔多個測量值。
> SELECT * FROM "NOAA_water_database"."autogen"."h2o_feet" name: h2o_feet -------------- time level description location water_level 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12 [...] 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938
查詢選擇在所述數據NOAA_water_database
中,autogen
保留策略和測量h2o_feet
。
在CLI中,徹底限定度量以查詢除USE
d數據庫之外的數據庫和保留策略之外的 DEFAULT
保留策略中的數據。在HTTP API中,若是須要,能夠徹底限定測量值,而不是使用db
和rp
查詢字符串參數。
> SELECT * FROM "NOAA_water_database".."h2o_feet" name: h2o_feet -------------- time level description location water_level 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12 [...] 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938
查詢選擇在所述數據NOAA_water_database
中,DEFAULT
保留策略和h2o_feet
測量。該..
指示DEFAULT
指定數據庫保留策略。
在CLI中,指定數據庫以查詢除USE
d數據庫以外的 數據庫中的數據。在HTTP API中,根據須要指定數據庫以代替使用db
查詢字符串參數。
查詢至少須要一個場關鍵 的在SELECT
返回數據的條款。若是該SELECT
子句僅包含單個標記鍵或多個標記鍵,則查詢將返回空響應。此行爲是系統存儲數據的結果。
如下查詢不返回任何數據,由於它location
在SELECT
子句中指定了單個標記key():
> SELECT "location" FROM "h2o_feet" >
要返回與location
標記鍵關聯的任何數據,查詢的SELECT
子句必須至少包含一個字段鍵(water_level
):
> SELECT "water_level","location" FROM "h2o_feet" LIMIT 3 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-09-18T21:36:00Z 5.066 santa_monica 2015-09-18T21:42:00Z 4.938 santa_monica
WHERE
條款厭倦了閱讀?看看這個InfluxQL短片:
SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]
該WHERE
子句支持conditional_expression
字段,標記和時間戳。
field_key <operator> ['string' | boolean | float | integer]
該WHERE
子句支持對string,boolean,float和integer 字段值進行比較。
WHERE
子句中的單引號字符串字段值。使用不帶引號的字符串字段值或雙引號字符串字段值的查詢將不返回任何數據,而且在大多數狀況下, 不會返回錯誤。
支持的運算符: =
等於 <>
不等於 !=
不等於 >
大於 >=
大於或等於 <
小於 <=
小於或等於
tag_key <operator> ['tag_value']
子句中的單引號標記值WHERE
。具備不帶引號的標記值或雙引號標記值的查詢將不會返回任何數據,而且在大多數狀況下, 不會返回錯誤。
支持的運營商: =
等於 <>
不等於 !=
不等於
其餘支持的功能: 正則表達式
對於大多數SELECT
語句,默認時間範圍介於UTC 1677-09-21 00:12:43.145224194
和2262-04-11T23:47:16.854775806Z
UTC之間。對於SELECT
帶有GROUP BY time()
子句的語句,默認時間範圍介於1677-09-21 00:12:43.145224194
UTC和now()
。
此頁面上的「 時間語法」部分詳細說明了如何在WHERE
子句中指定備用時間範圍。
> SELECT * FROM "h2o_feet" WHERE "water_level" > 8 name: h2o_feet -------------- time level description location water_level 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12 2015-08-18T00:06:00Z between 6 and 9 feet coyote_creek 8.005 [...] 2015-09-18T00:12:00Z between 6 and 9 feet coyote_creek 8.189 2015-09-18T00:18:00Z between 6 and 9 feet coyote_creek 8.084
從查詢返回的數據h2o_feet
測量與 字段值的water_level
是大於八。
> SELECT * FROM "h2o_feet" WHERE "level description" = 'below 3 feet' name: h2o_feet -------------- time level description location water_level 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064 2015-08-18T00:06:00Z below 3 feet santa_monica 2.116 [...] 2015-09-18T14:06:00Z below 3 feet santa_monica 2.999 2015-09-18T14:36:00Z below 3 feet santa_monica 2.907
查詢返回h2o_feet
測量中的數據,其字段值 level description
等於below 3 feet
字符串。InfluxQL須要在WHERE
子句中圍繞字符串字段值使用單引號。
> SELECT * FROM "h2o_feet" WHERE "water_level" + 2 > 11.9 name: h2o_feet -------------- time level description location water_level 2015-08-29T07:06:00Z at or greater than 9 feet coyote_creek 9.902 2015-08-29T07:12:00Z at or greater than 9 feet coyote_creek 9.938 2015-08-29T07:18:00Z at or greater than 9 feet coyote_creek 9.957 2015-08-29T07:24:00Z at or greater than 9 feet coyote_creek 9.964 2015-08-29T07:30:00Z at or greater than 9 feet coyote_creek 9.954 2015-08-29T07:36:00Z at or greater than 9 feet coyote_creek 9.941 2015-08-29T07:42:00Z at or greater than 9 feet coyote_creek 9.925 2015-08-29T07:48:00Z at or greater than 9 feet coyote_creek 9.902 2015-09-02T23:30:00Z at or greater than 9 feet coyote_creek 9.902
查詢返回h2o_feet
測量的數據,字段值 water_level
加上2,大於11.9。請注意,InfluxDB遵循標準操做順序。 有關支持的運算符的更多信息,請參閱數學運算符。
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' name: h2o_feet -------------- time water_level 2015-08-18T00:00:00Z 2.064 2015-08-18T00:06:00Z 2.116 [...] 2015-09-18T21:36:00Z 5.066 2015-09-18T21:42:00Z 4.938
查詢返回標記鍵設置爲的h2o_feet
測量 數據。InfluxQL須要在子句中圍繞標記值使用單引號。location
santa_monica
WHERE
> SELECT "water_level" FROM "h2o_feet" WHERE "location" <> 'santa_monica' AND (water_level < -0.59 OR water_level > 9.95) name: h2o_feet -------------- time water_level 2015-08-29T07:18:00Z 9.957 2015-08-29T07:24:00Z 9.964 2015-08-29T07:30:00Z 9.954 2015-08-29T14:30:00Z -0.61 2015-08-29T14:36:00Z -0.591 2015-08-30T15:18:00Z -0.594
查詢返回未設置h2o_feet
標記鍵的測量 數據location
,santa_monica
以及字段值 water_level
小於-0.59或大於9.95的數據。該WHERE
子句支持運營商AND
和OR
,並支持用括號分開的邏輯。
> SELECT * FROM "h2o_feet" WHERE time > now() - 7d
查詢返回h2o_feet
測量中具備 過去七天內時間戳的數據。此頁面上的「 時間語法」部分提供了有關該WHERE
子句中支持的時間語法的詳細信息。
WHERE
條款的常見問題WHERE
子句查詢意外返回任何數據在大多數狀況下,此問題是標記值 或字符串字段值周圍缺乏單引號的結果 。使用不帶引號或雙引號的標記值或字符串字段值的查詢將不會返回任何數據,而且在大多數狀況下,不會返回錯誤。
下面代碼塊中的前兩個查詢嘗試指定標記值, santa_monica
不帶任何引號和雙引號。那些查詢沒有返回結果。第三個查詢單引號santa_monica
(這是受支持的語法)並返回預期結果。
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = santa_monica > SELECT "water_level" FROM "h2o_feet" WHERE "location" = "santa_monica" > SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' name: h2o_feet -------------- time water_level 2015-08-18T00:00:00Z 2.064 [...] 2015-09-18T21:42:00Z 4.938
下面的代碼塊中的前兩個查詢嘗試指定字符串字段值,at or greater than 9 feet
不帶任何引號和雙引號。第一個查詢返回錯誤,由於字符串字段值包含空格。第二個查詢不返回任何結果。第三個查詢單引號at or greater than 9 feet
(這是受支持的語法)並返回預期結果。
> SELECT "level description" FROM "h2o_feet" WHERE "level description" = at or greater than 9 feet ERR: error parsing query: found than, expected ; at line 1, char 86 > SELECT "level description" FROM "h2o_feet" WHERE "level description" = "at or greater than 9 feet" > SELECT "level description" FROM "h2o_feet" WHERE "level description" = 'at or greater than 9 feet' name: h2o_feet -------------- time level description 2015-08-26T04:00:00Z at or greater than 9 feet [...] 2015-09-15T22:42:00Z at or greater than 9 feet
該GROUP BY
子句按用戶指定的標記集或時間間隔對查詢結果進行分組。
GROUP BY標籤 | |||
GROUP BY時間間隔: | 基本語法 | 高級語法 | GROUP BY時間間隔和fill() |
GROUP BY <tag>
查詢按用戶指定的標記集對查詢結果進行分組。
厭倦了閱讀?看看這個InfluxQL短片:
SELECT_clause FROM_clause [WHERE_clause] GROUP BY [* | <tag_key>[,<tag_key]]
GROUP BY *
按全部標籤分組結果
GROUP BY <tag_key>
按特定標記對結果進行分組
GROUP BY <tag_key>,<tag_key>
按多個標記對結果進行分組。標籤鍵的順序可有可無。
若是查詢包含WHERE
子句,則該GROUP BY
子句必須出如今該WHERE
子句以後。
其餘支持的功能:正則表達式
> SELECT MEAN("water_level") FROM "h2o_feet" GROUP BY "location" name: h2o_feet tags: location=coyote_creek time mean ---- ---- 1970-01-01T00:00:00Z 5.359342451341401 name: h2o_feet tags: location=santa_monica time mean ---- ---- 1970-01-01T00:00:00Z 3.530863470081006
該查詢使用的InfluxQL 函數 來計算平均water_level
爲每一個 變量值的location
在h2o_feet
測量。InfluxDB以兩個系列返回結果:每一個標籤值對應一個location
。
注意:在InfluxDB中,epoch 0(
1970-01-01T00:00:00Z
)一般用做等效的空時間戳。若是您請求的查詢沒有時間戳要返回,例如具備無限時間範圍的聚合函數,則InfluxDB將epoch 0做爲時間戳返回。
> SELECT MEAN("index") FROM "h2o_quality" GROUP BY location,randtag name: h2o_quality tags: location=coyote_creek, randtag=1 time mean ---- ---- 1970-01-01T00:00:00Z 50.69033760186263 name: h2o_quality tags: location=coyote_creek, randtag=2 time mean ---- ---- 1970-01-01T00:00:00Z 49.661867544220485 name: h2o_quality tags: location=coyote_creek, randtag=3 time mean ---- ---- 1970-01-01T00:00:00Z 49.360939907550076 name: h2o_quality tags: location=santa_monica, randtag=1 time mean ---- ---- 1970-01-01T00:00:00Z 49.132712456344585 name: h2o_quality tags: location=santa_monica, randtag=2 time mean ---- ---- 1970-01-01T00:00:00Z 50.2937984496124 name: h2o_quality tags: location=santa_monica, randtag=3 time mean ---- ---- 1970-01-01T00:00:00Z 49.99919903884662
該查詢使用InfluxQL 函數計算測量中標記和標記的index
每一個組合的 平均值。使用子句中的逗號分隔多個標記。location
randtag
h2o_quality
GROUP BY
> SELECT MEAN("index") FROM "h2o_quality" GROUP BY * name: h2o_quality tags: location=coyote_creek, randtag=1 time mean ---- ---- 1970-01-01T00:00:00Z 50.55405446521169 name: h2o_quality tags: location=coyote_creek, randtag=2 time mean ---- ---- 1970-01-01T00:00:00Z 50.49958856271162 name: h2o_quality tags: location=coyote_creek, randtag=3 time mean ---- ---- 1970-01-01T00:00:00Z 49.5164137518956 name: h2o_quality tags: location=santa_monica, randtag=1 time mean ---- ---- 1970-01-01T00:00:00Z 50.43829082296367 name: h2o_quality tags: location=santa_monica, randtag=2 time mean ---- ---- 1970-01-01T00:00:00Z 52.0688508894012 name: h2o_quality tags: location=santa_monica, randtag=3 time mean ---- ---- 1970-01-01T00:00:00Z 49.29386362086556
該查詢使用InfluxQL 函數 計算 測量中index
每一個可能的 標記組合的h2o_quality
平均值。
請注意,查詢結果與示例2 中的查詢結果相同,其中咱們明確指定了location
和randtag
標記鍵。這是由於h2o_quality
測量只有兩個標籤鍵。
GROUP BY time()
查詢按用戶指定的時間間隔對查詢結果進行分組。
SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(<time_interval>),[tag_key] [fill(<fill_option>)]
基本GROUP BY time()
的查詢須要InfluxQL 功能 中SELECT
條款和在一個時間範圍 WHERE
條款。請注意,該GROUP BY
子句必須在該WHERE
子句以後。
time(time_interval)
本time_interval
該在GROUP BY time()
子句是 文字的持續時間。它肯定InfluxDB組如何隨時間查詢結果。例如,time_interval
的5m
基團查詢結果劃分爲橫跨在指定的時間範圍內的五分鐘時間組WHERE
子句。
fill(<fill_option>)
fill(<fill_option>)
是可選的。它會更改報告的沒有數據的時間間隔值。有關 詳細信息,請參閱GROUP BY時間間隔fill()
。
覆蓋範圍:
基本GROUP BY time()
查詢依賴於time_interval
InfluxDB的預設時間邊界,以肯定每一個時間間隔中包含的原始數據以及查詢返回的時間戳。
如下示例使用如下示例數據的子示例:
> 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
> 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:24:00Z.
> 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
點數。它按location
標籤對結果進行分組,間隔爲12分鐘。請注意,時間間隔和標記鍵在GROUP BY
子句中用逗號分隔 。
該查詢返回兩個系列的結果:每一個 標籤值的的location
標籤。每一個時間戳的結果表明一個12分鐘的間隔。第一個時間戳的計數涵蓋了之間2015-08-18T00:00:00Z
和之間的原始數據,但不包括2015-08-18T00:12:00Z
。第二個時間戳的計數涵蓋了之間2015-08-18T00:12:00Z
和之間的原始數據,但不包括,2015-08-18T00:24:00Z.
使用基本語法,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
與WHERE
子句中任什麼時候間條件無關的間隔。在計算結果時,全部返回的數據必須在查詢的顯式時間範圍內發生,但GROUP BY
間隔將基於預設的時間邊界。
下表顯示 告終果中GROUP BY time()
每一個GROUP BY time()
間隔的預設時間邊界,相關間隔,包含的點和返回的時間戳。
時間間隔號 | 預設時間邊界 | GROUP BY time() 間隔 |
包含的積分 | 返回的時間戳 |
---|---|---|---|---|
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
)落在查詢的第一個GROUP BY time()
區間和第一個時間區間內。請注意,雖然返回的時間戳發生在查詢的時間範圍開始以前,但查詢結果會排除在查詢的時間範圍以前出現的數據。
第二個預設的12分鐘時間邊界從開始到00:12
結束 00:24
。只有一個原始點(7.887
)落在查詢的第二個GROUP BY time()
區間和第二個時間區間內。
該高級GROUP BY time()
語法容許用戶InfluxDB的預設時間界限的開始時間偏移。 「高級語法」部分中的示例3繼續顯示此處顯示的查詢; 它將預設時間邊界向前移動六分鐘,以便InfluxDB返回:
name: h2o_feet time count ---- ----- 2015-08-18T00:06:00Z 2
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)
有關 詳細信息,請參閱Basic GROUP BY time()語法time_interval
。
這offset_interval
是一個 持續時間字面值。它向前或向後移動InfluxDB的預設時間邊界。offset_interval
能夠是正面的也能夠是負面的。
fill(<fill_option>)
fill(<fill_option>)
是可選的。它會更改報告的沒有數據的時間間隔值。有關 詳細信息,請參閱GROUP BY時間間隔fill()
。
覆蓋範圍:
高級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
> 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
時間界限,並返回時間戳查詢,而不將 offset_interval
堅持InfluxDB預設的時間界限:
時間間隔號 | 預設時間邊界 | GROUP BY time() 間隔 |
包含的積分 | 返回的時間戳 |
---|---|---|---|---|
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 |
< - 相同 | 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 |
< - 相同 | 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
)都落在第一個GROUP BY time()
間隔內和第一個時間邊界內。請注意,雖然返回的時間戳發生在查詢的時間範圍開始以前,但查詢結果會排除在查詢的時間範圍以前出現的數據。
第二個預設的18分鐘時間邊界從開始到00:18
結束 00:36
。三個原始點(7.762
和7.635
和7.5
)所述第二內落入兩者GROUP BY time()
間隔和在第二時間邊界。在這種狀況下,邊界時間範圍和間隔的時間範圍是相同的。
第四個預設的18分鐘時間邊界開始於00:54
以前和結束 1:12:00
。一個原點(6.982
)落在第四個GROUP BY time()
區間內和第四個時間區間內。
時間界限,並返回時間戳查詢與該 offset_interval
堅持的偏移時間界限:
時間間隔號 | 偏移時間邊界 | GROUP BY time() 間隔 |
包含的積分 | 返回的時間戳 |
---|---|---|---|---|
1 | time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:24:00Z |
< - 相同 | 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 |
< - 相同 | 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 |
< - 相同 | 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 |
六分鐘偏移間隔向前移動預設邊界的時間範圍,使得邊界時間範圍和相關GROUP BY time()
間隔時間範圍始終相同。使用偏移量,每一個間隔執行三個點的計算,而且返回的時間戳匹配邊界時間範圍的開始和GROUP BY time()
間隔時間範圍的開始。
請注意,offset_interval
強制第四個時間邊界超出查詢的時間範圍,所以查詢不會返回該最後一個時間間隔的結果。
> 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,-12m) 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分鐘的時間間隔,並將預設時間邊界偏移-12分鐘。
注意:示例2中的查詢返回與示例1中的查詢相同的結果,但示例2中的查詢使用負數
offset_interval
而不是正數offset_interval
。兩個查詢之間沒有性能差別; 在決定正面和負面之間時,請隨意選擇最直觀的選項offset_interval
。
時間界限,並返回時間戳查詢,而不將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
時間界限,並返回時間戳查詢,而不將 offset_interval
堅持InfluxDB預設的時間界限:
時間間隔號 | 預設時間邊界 | GROUP BY time() 間隔 |
包含的積分 | 返回的時間戳 |
---|---|---|---|---|
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 |
< - 相同 | 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 |
< - 相同 | 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
)都落在第一個GROUP BY time()
間隔內和第一個時間邊界內。請注意,雖然返回的時間戳發生在查詢的時間範圍開始以前,但查詢結果會排除在查詢的時間範圍以前出現的數據。
第二個預設的18分鐘時間邊界從開始到00:18
結束 00:36
。三個原始點(7.762
和7.635
和7.5
)所述第二內落入兩者GROUP BY time()
間隔和在第二時間邊界。在這種狀況下,邊界時間範圍和間隔的時間範圍是相同的。
第四個預設的18分鐘時間邊界開始於00:54
以前和結束 1:12:00
。一個原點(6.982
)落在第四個GROUP BY time()
區間內和第四個時間區間內。
時間界限,並返回時間戳查詢與該 offset_interval
堅持的偏移時間界限:
時間間隔號 | 偏移時間邊界 | GROUP BY time() 間隔 |
包含的積分 | 返回的時間戳 |
---|---|---|---|---|
1 | time >= 2015-08-17T23:48:00Z AND time < 2015-08-18T00:06:00Z |
NA | NA | NA |
2 | time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:24:00Z |
< - 相同 | 8.005 ,7.887 ,7.762 |
2015-08-18T00:06:00Z |
3 | time >= 2015-08-18T00:24:00Z AND time < 2015-08-18T00:42:00Z |
< - 相同 | 7.635 ,7.5 ,7.372 |
2015-08-18T00:24:00Z |
4 | time >= 2015-08-18T00:42:00Z AND time < 2015-08-18T01:00:00Z |
< - 相同 | 7.234 ,7.11 ,6.982 |
2015-08-18T00:42:00Z |
負12分鐘偏移間隔將預設邊界的時間範圍移回,使得邊界時間範圍和相關GROUP BY time()
間隔時間範圍始終相同。使用偏移量,每一個間隔執行三個點的計算,而且返回的時間戳匹配邊界時間範圍的開始和GROUP BY time()
間隔時間範圍的開始。
請注意,offset_interval
強制第一個時間邊界超出查詢的時間範圍,所以查詢不會返回該第一個時間間隔的結果。
此示例是「 基本語法常見問題 」中概述的方案的延續。
> 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,6m) name: h2o_feet time count ---- ----- 2015-08-18T00:06:00Z 2
該查詢使用InfluxQL 函數 將平均water_level
分組結果計算爲12分鐘的時間間隔,並將預設時間邊界偏移6分鐘。
時間界限,並返回時間戳查詢,而不將offset_interval
堅持InfluxDB預設的時間界限。讓咱們首先檢查沒有偏移的結果:
> 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 2015-08-18T00:12:00Z 1
時間界限,並返回時間戳查詢,而不將 offset_interval
堅持InfluxDB預設的時間界限:
時間間隔號 | 預設時間邊界 | GROUP BY time() 間隔 |
包含的積分 | 返回的時間戳 |
---|---|---|---|---|
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
)落在查詢的第一個GROUP BY time()
區間和第一個時間區間內。請注意,雖然返回的時間戳發生在查詢的時間範圍開始以前,但查詢結果會排除在查詢的時間範圍以前出現的數據。
第二個預設的12分鐘時間邊界從開始到00:12
結束 00:24
。只有一個原始點(7.887
)落在查詢的第二個GROUP BY time()
區間和第二個時間區間內。
時間界限,並返回時間戳查詢與該 offset_interval
堅持的偏移時間界限:
時間間隔號 | 偏移時間邊界 | GROUP BY time() 間隔 |
包含的積分 | 返回的時間戳 |
---|---|---|---|---|
1 | time >= 2015-08-18T00:06:00Z AND time < 2015-08-18T00:18:00Z |
< - 相同 | 8.005 ,7.887 |
2015-08-18T00:06:00Z |
2 | time >= 2015-08-18T00:18:00Z AND time < 2015-08-18T00:30:00Z |
NA | NA | NA |
六分鐘偏移間隔向前移動預設邊界的時間範圍,使得預設邊界時間範圍和相關GROUP BY time()
間隔時間範圍相同。使用偏移量,查詢返回單個結果,而且返回的時間戳匹配邊界時間範圍的開始和GROUP BY time()
間隔時間範圍的開始。
請注意,offset_interval
強制第二個時間邊界超出查詢的時間範圍,所以查詢不會返回該第二個時間間隔的結果。
GROUP BY
時間間隔和 fill()
fill()
更改報告的沒有數據的時間間隔的值。
SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(time_interval,[<offset_interval])[,tag_key] [fill(<fill_option>)]
默認狀況下,GROUP BY time()
沒有數據的間隔null
在輸出列中報告其值。 fill()
更改報告的沒有數據的時間間隔的值。請注意,若是您有幾件事情(例如,標籤和時間間隔),則fill()
必須在GROUP BY
子句 的末尾。GROUP(ing) BY
任何數值報告沒有數據的時間間隔的給定數值。
linear
報告沒有數據的時間間隔的線性插值結果。
none
報告沒有時間戳,沒有沒有數據的時間間隔值。
null
對於沒有數據但返回時間戳的時間間隔報告爲null。這與默認行爲相同。
previous
報告上一時間間隔的值,表示沒有數據的時間間隔。
沒有fill(100)
:
> SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-09-18T16:00:00Z' AND time <= '2015-09-18T16:42:00Z' GROUP BY time(12m) name: h2o_feet -------------- time max 2015-09-18T16:00:00Z 3.599 2015-09-18T16:12:00Z 3.402 2015-09-18T16:24:00Z 3.235 2015-09-18T16:36:00Z
用fill(100)
:
> SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-09-18T16:00:00Z' AND time <= '2015-09-18T16:42:00Z' GROUP BY time(12m) fill(100) name: h2o_feet -------------- time max 2015-09-18T16:00:00Z 3.599 2015-09-18T16:12:00Z 3.402 2015-09-18T16:24:00Z 3.235 2015-09-18T16:36:00Z 100
fill(100)
更改成沒有數據的時間間隔報告的值100
。
fill()
fill()
時沒有數據落在查詢的時間範圍內目前,fill()
若是查詢的時間範圍內沒有數據,查詢將忽略。這是預期的行爲。GitHub上的一個開放 特徵請求建議,fill()
即便查詢的時間範圍不包含任何數據,也應該強制返回值。
例
如下查詢不返回任何數據,由於water_level
查詢的時間範圍內沒有點。請注意,這fill(800)
對查詢結果沒有影響。
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" = 'coyote_creek' AND time >= '2015-09-18T22:00:00Z' AND time <= '2015-09-18T22:18:00Z' GROUP BY time(12m) fill(800) >
fill(previous)
之前的結果什麼時候超出查詢的時間範圍fill(previous)
若是前一個值超出查詢的時間範圍,則不會填充時間間隔的結果。
例
如下查詢涵蓋了2015-09-18T16:24:00Z
和之間的時間範圍2015-09-18T16:54:00Z
。請注意,fill(previous)
使用結果填充2015-09-18T16:36:00Z
結果2015-09-18T16:24:00Z
。
> SELECT MAX("water_level") FROM "h2o_feet" WHERE location = 'coyote_creek' AND time >= '2015-09-18T16:24:00Z' AND time <= '2015-09-18T16:54:00Z' GROUP BY time(12m) fill(previous) name: h2o_feet -------------- time max 2015-09-18T16:24:00Z 3.235 2015-09-18T16:36:00Z 3.235 2015-09-18T16:48:00Z 4
下一個查詢縮短了上一個查詢中的時間範圍。它如今涵蓋了2015-09-18T16:36:00Z
和之間的時間2015-09-18T16:54:00Z
。注意,fill(previous)
不會2015-09-18T16:36:00Z
用結果填充結果2015-09-18T16:24:00Z
; 結果2015-09-18T16:24:00Z
是在查詢的較短期範圍以外。
> SELECT MAX("water_level") FROM "h2o_feet" WHERE location = 'coyote_creek' AND time >= '2015-09-18T16:36:00Z' AND time <= '2015-09-18T16:54:00Z' GROUP BY time(12m) fill(previous) name: h2o_feet -------------- time max 2015-09-18T16:36:00Z 2015-09-18T16:48:00Z 4
fill(linear)
當前一個或後一個結果超出查詢的時間範圍時fill(linear)
若是先前結果或如下結果超出查詢的時間範圍,則不會在沒有數據的時間間隔內填充結果。
例
如下查詢涵蓋了2016-11-11T21:24:00Z
和 之間的時間範圍2016-11-11T22:06:00Z
。請注意,fill(linear)
使用2016-11-11T21:36:00Z
時間間隔和2016-11-11T21:48:00Z
時間間隔中的值填充 2016-11-11T21:24:00Z
時間間隔和 2016-11-11T22:00:00Z
時間間隔的結果。
> SELECT MEAN("tadpoles") FROM "pond" WHERE time > '2016-11-11T21:24:00Z' AND time <= '2016-11-11T22:06:00Z' GROUP BY time(12m) fill(linear) name: pond time mean ---- ---- 2016-11-11T21:24:00Z 3 2016-11-11T21:36:00Z 4 2016-11-11T21:48:00Z 5 2016-11-11T22:00:00Z 6
下一個查詢縮短了上一個查詢中的時間範圍。它如今涵蓋了2016-11-11T21:36:00Z
和之間的時間2016-11-11T22:06:00Z
。注意,fill()
之前沒有填寫2016-11-11T21:36:00Z
時間間隔和2016-11-11T21:48:00Z
時間間隔的結果; 結果 2016-11-11T21:24:00Z
是在查詢的較短期範圍以外,InfluxDB沒法執行線性插值。
> SELECT MEAN("tadpoles") FROM "pond" WHERE time >= '2016-11-11T21:36:00Z' AND time <= '2016-11-11T22:06:00Z' GROUP BY time(12m) fill(linear) name: pond time mean ---- ---- 2016-11-11T21:36:00Z 2016-11-11T21:48:00Z 2016-11-11T22:00:00Z 6
注意:問題3中的數據不在
NOAA_water_database
。咱們必須建立一個數據集,其中包含較少的常規數據fill(linear)
。
該INTO
子句將查詢結果寫入用戶指定的度量。
SELECT_clause INTO <measurement_name> FROM_clause [WHERE_clause] [GROUP_BY_clause]
該INTO
子句支持幾種指定測量的格式:
INTO <measurement_name>
將數據寫入指定的測量值。若是您正在使用CLI,則 InfluxDB會將數據寫入USE
d 數據庫中的度量 和DEFAULT
保留策略。若是您正在使用HTTP API,則 InfluxDB會將數據寫入db
查詢字符串參數 和DEFAULT
保留策略中指定的數據庫中的度量。
INTO <database_name>.<retention_policy_name>.<measurement_name>
將數據寫入徹底合格的測量。經過指定其數據庫和保留策略來徹底限定測量。
INTO <database_name>..<measurement_name>
將數據寫入用戶指定數據庫中的度量和DEFAULT
保留策略。
INTO <database_name>.<retention_policy_name>.:MEASUREMENT FROM /<regular_expression>/
將數據寫入用戶指定的數據庫中的全部度量以及與子句中的正則表達式匹配的保留策略FROM
。 :MEASUREMENT
是對FROM
條款中匹配的每一個度量的反向引用。
> SELECT * INTO "copy_NOAA_water_database"."autogen".:MEASUREMENT FROM "NOAA_water_database"."autogen"./.*/ GROUP BY * name: result time written ---- ------- 0 76290
不能直接在InfluxDB中重命名數據庫,所以該INTO
子句的一個常見用途是將數據從一個數據庫移動到另外一個數據庫。上面的查詢將NOAA_water_database
和autogen
保留策略中的全部數據寫入copy_NOAA_water_database
數據庫和autogen
保留策略。
該反向引用語法(:MEASUREMENT
)維持在目標數據庫中的源測量名稱。請注意,在運行查詢以前,copy_NOAA_water_database
數據庫及其autogen
保留策略都必須存在INTO
。有關 如何管理數據庫和保留策略,請參閱數據庫管理。
該GROUP BY *
子句將源數據庫中的標記保留爲目標數據庫中的標記。如下查詢不維護標記的系列上下文; 標籤將做爲字段存儲在目標數據庫(copy_NOAA_water_database
)中:
SELECT * INTO "copy_NOAA_water_database"."autogen".:MEASUREMENT FROM "NOAA_water_database"."autogen"./.*/
在移動大量數據時,咱們建議按順序運行INTO
不一樣測量的查詢並使用WHERE
子句中的時間邊界。這能夠防止系統內存不足。下面的代碼塊提供了這些查詢的示例語法:
SELECT * INTO <destination_database>.<retention_policy_name>.<measurement_name> FROM <source_database>.<retention_policy_name>.<measurement_name> WHERE time > now() - 100w and time < now() - 90w GROUP BY * SELECT * INTO <destination_database>.<retention_policy_name>.<measurement_name> FROM <source_database>.<retention_policy_name>.<measurement_name>} WHERE time > now() - 90w and time < now() - 80w GROUP BY * SELECT * INTO <destination_database>.<retention_policy_name>.<measurement_name> FROM <source_database>.<retention_policy_name>.<measurement_name> WHERE time > now() - 80w and time < now() - 70w GROUP BY *
> SELECT "water_level" INTO "h2o_feet_copy_1" FROM "h2o_feet" WHERE "location" = 'coyote_creek' name: result ------------ time written 1970-01-01T00:00:00Z 7604 > SELECT * FROM "h2o_feet_copy_1" name: h2o_feet_copy_1 --------------------- time water_level 2015-08-18T00:00:00Z 8.12 [...] 2015-09-18T16:48:00Z 4
查詢將其結果寫爲新的度量:h2o_feet_copy_1
。若是您使用的是CLI,InfluxDB會將數據寫入USE
d 數據庫和DEFAULT
保留策略。若是您使用的HTTP API,InfluxDB將數據寫入到指定的數據庫和保留策略db
和rp
查詢字符串參數。若是未設置rp
查詢字符串參數,則HTTP API會自動將數據寫入數據庫的DEFAULT
保留策略。
響應顯示7605
InfluxDB寫入的points()數h2o_feet_copy_1
。響應中的時間戳沒有意義; InfluxDB使用epoch 0(1970-01-01T00:00:00Z
)做爲等效的空時間戳。
> SELECT "water_level" INTO "where_else"."autogen"."h2o_feet_copy_2" FROM "h2o_feet" WHERE "location" = 'coyote_creek' name: result ------------ time written 1970-01-01T00:00:00Z 7604 > SELECT * FROM "where_else"."autogen"."h2o_feet_copy_2" name: h2o_feet_copy_2 --------------------- time water_level 2015-08-18T00:00:00Z 8.12 [...] 2015-09-18T16:48:00Z 4
查詢將其結果寫入新的度量:h2o_feet_copy_2
。InfluxDB將數據寫入where_else
數據庫和autogen
保留策略。請注意這兩個where_else
和autogen
以前運行必須存在INTO
查詢。有關 如何管理數據庫和保留策略,請參閱數據庫管理。
響應顯示7605
InfluxDB寫入的points()數h2o_feet_copy_2
。響應中的時間戳沒有意義; InfluxDB使用epoch 0(1970-01-01T00:00:00Z
)做爲等效的空時間戳。
> SELECT MEAN("water_level") INTO "all_my_averages" 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: result ------------ time written 1970-01-01T00:00:00Z 3 > SELECT * FROM "all_my_averages" name: all_my_averages --------------------- time mean 2015-08-18T00:00:00Z 8.0625 2015-08-18T00:12:00Z 7.8245 2015-08-18T00:24:00Z 7.5675
查詢使用InfluxQL 函數和GROUP BY time()
子句聚合數據。它還將其結果寫入all_my_averages
測量結果。
響應顯示3
InfluxDB寫入的points()數all_my_averages
。響應中的時間戳沒有意義; InfluxDB使用epoch 0(1970-01-01T00:00:00Z
)做爲等效的空時間戳。
查詢是下采樣的示例:獲取更高精度的數據,將這些數據聚合到更低的精度,並將更低精度的數據存儲在數據庫中。下采樣是該INTO
條款的常見用例。
> SELECT MEAN(*) INTO "where_else"."autogen".:MEASUREMENT FROM /.*/ WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:06:00Z' GROUP BY time(12m) name: result time written ---- ------- 1970-01-01T00:00:00Z 5 > SELECT * FROM "where_else"."autogen"./.*/ name: average_temperature time mean_degrees mean_index mean_pH mean_water_level ---- ------------ ---------- ------- ---------------- 2015-08-18T00:00:00Z 78.5 name: h2o_feet time mean_degrees mean_index mean_pH mean_water_level ---- ------------ ---------- ------- ---------------- 2015-08-18T00:00:00Z 5.07625 name: h2o_pH time mean_degrees mean_index mean_pH mean_water_level ---- ------------ ---------- ------- ---------------- 2015-08-18T00:00:00Z 6.75 name: h2o_quality time mean_degrees mean_index mean_pH mean_water_level ---- ------------ ---------- ------- ---------------- 2015-08-18T00:00:00Z 51.75 name: h2o_temperature time mean_degrees mean_index mean_pH mean_water_level ---- ------------ ---------- ------- ---------------- 2015-08-18T00:00:00Z 63.75
查詢使用InfluxQL 函數和GROUP BY time()
子句聚合數據。它在每個匹配的測量數據彙總的正則表達式 中FROM
子句和結果與在相同的名字寫入測量 where_else
數據庫和autogen
保留策略。請注意這兩個where_else
和autogen
以前運行必須存在INTO
查詢。有關 如何管理數據庫和保留策略,請參閱數據庫管理。
響應顯示5
InfluxDB寫入where_else
數據庫的點數()和autogen
保留策略。響應中的時間戳沒有意義; InfluxDB使用epoch 0(1970-01-01T00:00:00Z
)做爲等效的空時間戳。
該查詢是使用反向引用進行下采樣的示例。它從多個測量中獲取更高精度的數據,將這些數據聚合到更低的精度,並將較低精度的數據存儲在數據庫中。使用反向引用進行下采樣是該INTO
子句的常見用例。
INTO
條款的常見問題若是INTO
查詢在子句中包含標記鍵,則查詢會將當前度量中的標記轉換爲目標度量中的字段。這可能致使InfluxDB覆蓋先前由標記值區分的點。請注意,此行爲不適用於使用或函數的查詢。「 常見問題解答」 文檔詳細描述了該行爲。SELECT
TOP()
BOTTOM()
將當前度量中的標記保留爲目標度量中GROUP BY
的標記, 相關標記鍵或查詢GROUP BY *
中的標記INTO
。
INTO
子句自動執行查詢INTO
本文檔中的子句部分顯示瞭如何使用INTO
子句手動實現查詢。有關 如何自動執行實時數據的子句查詢,請參閱Continuous Queries文檔INTO
。在其餘用途中,Continuous Queries自動執行下采樣過程。
缺省狀況下,InfluxDB按升序時間順序返回結果; 返回的第一個點具備最舊的時間戳,返回的最後一個點具備最新的時間戳。 ORDER BY time DESC
反轉該順序,以使InfluxDB首先返回具備最新時間戳的點。
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] ORDER BY time DESC
ORDER by time DESC
若是查詢包含GROUP BY
子句,則必須出如今子句以後GROUP BY
。 若是查詢包含子句且沒有子句,則ORDER by time DESC
必須出如今WHERE
子句以後。WHERE
GROUP BY
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' ORDER BY time DESC name: h2o_feet time water_level ---- ----------- 2015-09-18T21:42:00Z 4.938 2015-09-18T21:36:00Z 5.066 [...] 2015-08-18T00:06:00Z 2.116 2015-08-18T00:00:00Z 2.064
查詢首先返回h2o_feet
測量中具備最新時間戳的點 。若是沒有ORDER by time DESC
,查詢將返回2015-08-18T00:00:00Z
第一個和2015-09-18T21:42:00Z
最後一個。
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:42:00Z' GROUP BY time(12m) ORDER BY time DESC name: h2o_feet time mean ---- ---- 2015-08-18T00:36:00Z 4.6825 2015-08-18T00:24:00Z 4.80675 2015-08-18T00:12:00Z 4.950749999999999 2015-08-18T00:00:00Z 5.07625
該查詢使用InfluxQL 函數 和GROUP BY子句中的時間間隔 來計算water_level
查詢時間範圍內每一個12分鐘間隔的平均值。 ORDER BY time DESC
首先返回最近的12分鐘時間間隔。
若是沒有ORDER BY time DESC
,查詢將返回 2015-08-18T00:00:00Z
第一個和2015-08-18T00:36:00Z
最後一個。
LIMIT
並SLIMIT
限制每一個查詢返回的 點數和 系列數。
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] LIMIT <N>
N
指定從指定測量返回的點數。若是大於測量中的點數,InfluxDB將返回該系列中的全部點。N
請注意,該LIMIT
子句必須按照上面語法中概述的順序出現。
> SELECT "water_level","location" FROM "h2o_feet" LIMIT 3 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
該查詢返回的三個大點從(由時間戳肯定的)h2o_feet
測量。
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:42:00Z' GROUP BY *,time(12m) LIMIT 2 name: h2o_feet tags: location=coyote_creek time mean ---- ---- 2015-08-18T00:00:00Z 8.0625 2015-08-18T00:12:00Z 7.8245 name: h2o_feet tags: location=santa_monica time mean ---- ---- 2015-08-18T00:00:00Z 2.09 2015-08-18T00:12:00Z 2.077
該查詢使用InfluxQL 函數 和GROUP BY子句 計算water_level
每一個標記的平均值以及查詢時間範圍內每一個12分鐘間隔的平均值。 LIMIT 2
請求兩個最舊的十二分鐘平均值(由時間戳肯定)。
請注意,若是沒有LIMIT 2
,查詢將返回每一個系列四個點; 在查詢的時間範圍內每隔十二分鐘一個。
SLIMIT
條款SLIMIT <N>
返回指定測量中 <N> 系列的每一個點。
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] GROUP BY *[,time(<time_interval>)] [ORDER_BY_clause] SLIMIT <N>
N
指定從指定測量返回的系列數。若是大於測量中的系列數,InfluxDB將返回該測量的全部系列。N
有一個持續的問題須要查詢SLIMIT
包含GROUP BY *
。請注意,該SLIMIT
子句必須按照上面語法中概述的順序出現。
> SELECT "water_level" FROM "h2o_feet" GROUP BY * SLIMIT 1 name: h2o_feet tags: location=coyote_creek 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-09-18T16:12:00Z 3.402 2015-09-18T16:18:00Z 3.314 2015-09-18T16:24:00Z 3.235
查詢返回與測量相關聯的系列之一的全部water_level
點。h2o_feet
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:42:00Z' GROUP BY *,time(12m) SLIMIT 1 name: h2o_feet tags: location=coyote_creek time mean ---- ---- 2015-08-18T00:00:00Z 8.0625 2015-08-18T00:12:00Z 7.8245 2015-08-18T00:24:00Z 7.5675 2015-08-18T00:36:00Z 7.303
該查詢使用InfluxQL 函數 和GROUP BY子句中的時間間隔 來計算water_level
查詢時間範圍內每一個12分鐘間隔的平均值。 SLIMIT 1
請求與h2o_feet
測量相關的單個系列。
請注意,若是沒有SLIMIT 1
,查詢將返回與h2o_feet
度量關聯的兩個系列的結果:location=coyote_creek
和 location=santa_monica
。
LIMIT <N>
而後SLIMIT <N>
返回指定測量中<N> 系列的第一個<N> 點。
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] GROUP BY *[,time(<time_interval>)] [ORDER_BY_clause] LIMIT <N1> SLIMIT <N2>
N1
指定每次測量返回的點數。若是大於測量中的點數,InfluxDB將返回該測量中的全部點。N1
N2
指定從指定測量返回的系列數。若是N2
大於測量中的系列數,InfluxDB將返回該測量的全部系列。
有一個持續的問題須要查詢LIMIT
和SLIMIT
包括GROUP BY *
。請注意,LIMIT
和SLIMIT
子句必須按照上面語法中列出的順序出現。
> SELECT "water_level" FROM "h2o_feet" GROUP BY * LIMIT 3 SLIMIT 1 name: h2o_feet tags: location=coyote_creek time water_level ---- ----------- 2015-08-18T00:00:00Z 8.12 2015-08-18T00:06:00Z 8.005 2015-08-18T00:12:00Z 7.887
該查詢從與測量相關聯 的系列之一返回三個最舊的點(由時間戳肯定)。 h2o_feet
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:42:00Z' GROUP BY *,time(12m) LIMIT 2 SLIMIT 1 name: h2o_feet tags: location=coyote_creek time mean ---- ---- 2015-08-18T00:00:00Z 8.0625 2015-08-18T00:12:00Z 7.8245
該查詢使用InfluxQL 函數 和GROUP BY子句中的時間間隔 來計算water_level
查詢時間範圍內每一個12分鐘間隔的平均值。 LIMIT 2
請求兩個最舊的十二分鐘平均值(由時間戳肯定)並SLIMIT 1
請求與h2o_feet
測量相關聯的單個序列。
請注意,若是沒有LIMIT 2 SLIMIT 1
,查詢將爲與h2o_feet
測量關聯的兩個系列中的每個返回四個點。
OFFSET條款 | SOFFSET條款 |
OFFSET
條款OFFSET <N>
分頁N
點在查詢結果中。
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] LIMIT_clause OFFSET <N> [SLIMIT_clause]
N
指定要分頁的點數。該OFFSET
條款要求一個LIMIT
條款。使用OFFSET
不帶LIMIT
子句的子句會致使查詢結果不一致。
注意:若是
WHERE
子句包含時間範圍,InfluxDB將不返回任何結果,而且該OFFSET
子句將致使InfluxDB返回時間戳超出該時間範圍的點。
> SELECT "water_level","location" FROM "h2o_feet" LIMIT 3 OFFSET 3 name: h2o_feet time water_level location ---- ----------- -------- 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
查詢返回的第四,第五,和第六點從h2o_feet
測量。若是查詢未包含OFFSET 3
,則返回該測量的第一,第二和第三點。
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:42:00Z' GROUP BY *,time(12m) ORDER BY time DESC LIMIT 2 OFFSET 2 SLIMIT 1 name: h2o_feet tags: location=coyote_creek time mean ---- ---- 2015-08-18T00:12:00Z 7.8245 2015-08-18T00:00:00Z 8.0625
這個例子很是複雜,因此這裏是逐個細分的:
該SELECT
子句指定InfluxQL 函數。該FROM
條款規定了單一測量。該WHERE
子句指定查詢的時間範圍。該GROUP BY
子句按全部標記(*
)分組結果,並以12分鐘爲間隔。該ORDER BY time DESC
子句以降序的時間戳順序返回結果。該LIMIT 2
條款將返回的點數限制爲兩個。該OFFSET 2
子句從查詢結果中排除前兩個平均值。該SLIMIT 1
子句將返回的序列數限制爲一。
若是沒有OFFSET 2
,查詢將返回查詢結果的前兩個平均值:
name: h2o_feet tags: location=coyote_creek time mean ---- ---- 2015-08-18T00:36:00Z 7.303 2015-08-18T00:24:00Z 7.5675
SOFFSET
條款SOFFSET <N>
查詢結果中的分頁N
系列。
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] GROUP BY *[,time(time_interval)] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] SLIMIT_clause SOFFSET <N>
N
指定要分頁的系列數。該SOFFSET
條款要求一個SLIMIT
條款。使用SOFFSET
不帶SLIMIT
子句的子句會致使查詢結果不一致。有一個持續的問題須要查詢SLIMIT
包含GROUP BY *
。
注意:若是
SOFFSET
子句分頁超過系列總數,則InfluxDB不返回任何結果。
> SELECT "water_level" FROM "h2o_feet" GROUP BY * SLIMIT 1 SOFFSET 1 name: h2o_feet tags: location=santa_monica time water_level ---- ----------- 2015-08-18T00:00:00Z 2.064 2015-08-18T00:06:00Z 2.116 [...] 2015-09-18T21:36:00Z 5.066 2015-09-18T21:42:00Z 4.938
查詢返回與度量和標記關聯的系列的數據。若是沒有,查詢將返回與度量和標記關聯的系列的數據 。h2o_feet
location = santa_monica
SOFFSET 1
h2o_feet
location = coyote_creek
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:42:00Z' GROUP BY *,time(12m) ORDER BY time DESC LIMIT 2 OFFSET 2 SLIMIT 1 SOFFSET 1 name: h2o_feet tags: location=santa_monica time mean ---- ---- 2015-08-18T00:12:00Z 2.077 2015-08-18T00:00:00Z 2.09
這個例子很是複雜,因此這裏是逐個細分的:
該SELECT
子句指定InfluxQL 函數。該FROM
條款規定了單一測量。該WHERE
子句指定查詢的時間範圍。該GROUP BY
子句按全部標記(*
)分組結果,並以12分鐘爲間隔。該ORDER BY time DESC
子句以降序的時間戳順序返回結果。該LIMIT 2
條款將返回的點數限制爲兩個。該OFFSET 2
子句從查詢結果中排除前兩個平均值。該SLIMIT 1
子句將返回的序列數限制爲一。該SOFFSET 1
子句對返回的系列進行分頁。
若是沒有SOFFSET 1
,查詢將返回不一樣系列的結果:
name: h2o_feet tags: location=coyote_creek time mean ---- ---- 2015-08-18T00:12:00Z 7.8245 2015-08-18T00:00:00Z 8.0625
該tz()
子句返回指定時區的UTC偏移量。
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] tz('<time_zone>')
缺省狀況下,InfluxDB以UTC格式存儲並返回時間戳。該tz()
子句包括UTC偏移量,或者,若是適用,還包括查詢返回的時間戳的UTC夏令時(DST)偏移量。返回的時間戳必須採用RFC3339格式才能顯示UTC偏移或UTC DST。該time_zone
參數遵循Internet Assigned Numbers Authority時區數據庫中的TZ語法,而且它須要單引號。
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:18:00Z' tz('America/Chicago') name: h2o_feet time water_level ---- ----------- 2015-08-17T19:00:00-05:00 2.064 2015-08-17T19:06:00-05:00 2.116 2015-08-17T19:12:00-05:00 2.028 2015-08-17T19:18:00-05:00 2.126
查詢結果包括時間戳中時區的UTC偏移量(-05:00
)America/Chicago
。
對於大多數SELECT
語句,默認時間範圍介於UTC 1677-09-21 00:12:43.145224194
和2262-04-11T23:47:16.854775806Z
UTC之間。對於SELECT
帶有GROUP BY time()
子句的語句,默認時間範圍介於1677-09-21 00:12:43.145224194
UTC和now()
。如下部分詳細說明了如何在SELECT
語句的WHERE
子句中指定備用時間範圍。
絕對時間 | 相對時間 | 時間語法的常見問題 |
厭倦了閱讀?看看這個InfluxQL短片:
使用日期時間字符串和紀元時間指定絕對時間。
SELECT_clause FROM_clause WHERE time <operator> ['<rfc3339_date_time_string>' | '<rfc3339_like_date_time_string>' | <epoch_time>] [AND ['<rfc3339_date_time_string>' | '<rfc3339_like_date_time_string>' | <epoch_time>] [...]]
=
等於 <>
不等於 !=
不等於 >
大於 >=
大於或等於 <
小於 <=
小於或等於
目前,InfluxDB不支持OR
在該WHERE
子句中使用絕對時間。有關 詳細信息,請參閱常見問題解答 文檔和GitHub問題。
'YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ'
.nnnnnnnnn
是可選的,.000000000
若是不包含,則設置爲。在RFC3339時間串須要單引號。
'YYYY-MM-DD HH:MM:SS.nnnnnnnnn'
HH:MM:SS.nnnnnnnnn.nnnnnnnnn
是可選的,00:00:00.000000000
若是不包含,則設置爲。相似RFC3339的日期時間字符串須要單引號。
紀元時間是自1970年1月1日星期四00:00:00世界協調時間(UTC)以來通過的時間量。
默認狀況下,InfluxDB假定全部紀元時間戳都以納秒爲單位。 在紀元時間戳的末尾包括持續時間文字,以指示除納秒以外的精度。
全部時間戳格式都支持基本算術。從具備持續時間字面值的時間戳添加(+
)或減去(-
)時間。請注意,InfluxQL須要在or 和duration文本之間有一個空格。+
-
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00.000000000Z' AND time <= '2015-08-18T00:12:00Z' name: h2o_feet time water_level ---- ----------- 2015-08-18T00:00:00Z 2.064 2015-08-18T00:06:00Z 2.116 2015-08-18T00:12:00Z 2.028
查詢返回的數據時間戳介於2015年8月18日00:00:00.000000000和2015年8月18日00:12:00之間。第一個時間戳(.000000000
)中的納秒規範是可選的。
請注意,RFC3339日期時間字符串周圍的單引號是必需的。
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18' AND time <= '2015-08-18 00:12:00' name: h2o_feet time water_level ---- ----------- 2015-08-18T00:00:00Z 2.064 2015-08-18T00:06:00Z 2.116 2015-08-18T00:12:00Z 2.028
查詢返回時間戳爲2015年8月18日00:00:00至2015年8月18日00:12:00的數據。第一個日期時間字符串不包含時間; InfluxDB假設時間是00:00:00。
請注意,相似RFC3339的日期時間字符串的單引號是必需的。
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= 1439856000000000000 AND time <= 1439856720000000000 name: h2o_feet time water_level ---- ----------- 2015-08-18T00:00:00Z 2.064 2015-08-18T00:06:00Z 2.116 2015-08-18T00:12:00Z 2.028
查詢返回的數據時間戳介於2015年8月18日00:00:00和2015年8月18日00:12:00之間。默認狀況下,InfluxDB假設紀元時間戳以納秒爲單位。
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= 1439856000s AND time <= 1439856720s name: h2o_feet time water_level ---- ----------- 2015-08-18T00:00:00Z 2.064 2015-08-18T00:06:00Z 2.116 2015-08-18T00:12:00Z 2.028
查詢返回的數據時間戳介於2015年8月18日00:00:00和2015年8月18日00:12:00之間。的s
持續時間的文字是在信號出現時間標記的結束指示該曆元時間戳是在秒。
> SELECT "water_level" FROM "h2o_feet" WHERE time > '2015-09-18T21:24:00Z' + 6m name: h2o_feet time water_level ---- ----------- 2015-09-18T21:36:00Z 5.066 2015-09-18T21:42:00Z 4.938
查詢返回的數據時間戳至少在2015年9月18日21:24:00後六分鐘發生。注意之間的空白+
和6m
須要。
> SELECT "water_level" FROM "h2o_feet" WHERE time > 24043524m - 6m name: h2o_feet time water_level ---- ----------- 2015-09-18T21:24:00Z 5.013 2015-09-18T21:30:00Z 5.01 2015-09-18T21:36:00Z 5.066 2015-09-18T21:42:00Z 4.938
查詢返回的數據時間戳至少發生在2015年9月18日21:24:00以前的六分鐘。注意之間的空白-
和6m
須要。
SELECT_clause FROM_clause WHERE time <operator> now() [[ - | + ] <duration_literal>] [(AND|OR) now() [...]]
now()
是在該服務器上執行查詢時服務器的Unix時間。之間的空白-
或+
與持續時間文字是必需的。
=
等於 <>
不等於 !=
不等於 >
大於 >=
大於或等於 <
小於 <=
小於或等於
u
或µ
微秒 ms
毫秒 s
秒 m
分鐘 h
小時 d
數w
周
> SELECT "water_level" FROM "h2o_feet" WHERE time > now() - 1h
查詢返回帶有過去一小時內發生的時間戳的數據。之間的空白-
和1h
須要。
> SELECT "level description" FROM "h2o_feet" WHERE time > '2015-09-18T21:18:00Z' AND time < now() + 1000d name: h2o_feet time level description ---- ----------------- 2015-09-18T21:24:00Z between 3 and 6 feet 2015-09-18T21:30:00Z between 3 and 6 feet 2015-09-18T21:36:00Z between 3 and 6 feet 2015-09-18T21:42:00Z between 3 and 6 feet
查詢返回的數據時間戳發生在2015年9月18日21:18:00和1000天之間now()
。之間的空白+
和1000d
須要。
OR
選擇的時間多的時間間隔InfluxDB不支持OR
在WHERE
子句中使用運算符來指定多個時間間隔。
有關更多信息,請參閱常見問題解答。
now()
帶有GROUP BY time()
子句後發生的數據大多數SELECT
語句的默認時間範圍介於UTC 1677-09-21 00:12:43.145224194
和2262-04-11T23:47:16.854775806Z
UTC之間。對於SELECT
帶有GROUP BY time()
子句的語句,默認時間範圍介於1677-09-21 00:12:43.145224194
UTC和now()
。
要使用後面出現的時間戳查詢數據now()
,SELECT
帶有GROUP BY time()
子句的語句必須在子句中提供備用上限 WHERE
。
使用CLI將點寫入如下內容NOAA_water_database
以後now()
:
> INSERT h2o_feet,location=santa_monica water_level=3.1 1587074400000000000
運行一個GROUP BY time()
查詢,其中包含時間戳2015-09-18T21:30:00Z
和之間的數據 now()
:
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='santa_monica' AND time >= '2015-09-18T21:30:00Z' GROUP BY time(12m) fill(none) name: h2o_feet time mean ---- ---- 2015-09-18T21:24:00Z 5.01 2015-09-18T21:36:00Z 5.002
運行一個GROUP BY time()
查詢,其中包含時間戳介於2015-09-18T21:30:00Z
180周和之間的數據 now()
:
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='santa_monica' AND time >= '2015-09-18T21:30:00Z' AND time <= now() + 180w GROUP BY time(12m) fill(none) name: h2o_feet time mean ---- ---- 2015-09-18T21:24:00Z 5.01 2015-09-18T21:36:00Z 5.002 2020-04-16T22:00:00Z 3.1
請注意,該WHERE
子句必須提供替代上限以覆蓋默認now()
上限。如下查詢僅重置下限,以now()
使查詢的時間範圍介於now()
和之間 now()
:
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='santa_monica' AND time >= now() GROUP BY time(12m) fill(none) >
該CLI默認返回納秒紀元格式的時間戳。使用該precision <format>
命令指定備用格式 。默認狀況下,HTTP API以RFC3339格式返回時間戳。使用epoch
查詢字符串參數指定備用格式 。
InfluxQL支持在指定時使用正則表達式:
目前,InfluxQL不支持使用正則表達式來匹配WHERE
子句, 數據庫和 保留策略中的非字符串字段值 。
注意:正則表達式比較比精確的字符串比較更具計算密集性; 使用正則表達式的查詢與沒有正則表達式的查詢不一樣。
SELECT /<regular_expression_field_key>/ FROM /<regular_expression_measurement>/ WHERE [<tag_key> <operator> /<regular_expression_tag_value>/ | <field_key> <operator> /<regular_expression_field_value>/] GROUP BY /<regular_expression_tag_key>/
正則表達式由/
字符包圍,並使用 Golang的正則表達式語法。
支持的運算符: =~
匹配的匹配項 !~
不匹配
> SELECT /l/ FROM "h2o_feet" LIMIT 1 name: h2o_feet time level description location water_level ---- ----------------- -------- ----------- 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
查詢選擇全部場鍵 和標籤按鍵,其中包括一個l
。請注意,SELECT
子句中的正則表達式必須至少匹配一個字段鍵才能返回與正則表達式匹配的標記鍵的結果。
目前,沒有語法來區分字段中的正則表達式和SELECT
子句中標記鍵的正則表達式。語法/<regular_expression>/::[field | tag]
不受支持。
> SELECT DISTINCT(/level/) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00.000000000Z' AND time <= '2015-08-18T00:12:00Z' name: h2o_feet time distinct_level description distinct_water_level ---- -------------------------- -------------------- 2015-08-18T00:00:00Z below 3 feet 2.064 2015-08-18T00:00:00Z 2.116 2015-08-18T00:00:00Z 2.028
該查詢使用InfluxQL 函數 爲 包含該單詞的每一個字段鍵返回不一樣的字段值level
。
> SELECT MEAN("degrees") FROM /temperature/ name: average_temperature time mean ---- ---- 1970-01-01T00:00:00Z 79.98472932232272 name: h2o_temperature time mean ---- ---- 1970-01-01T00:00:00Z 64.98872722506226
該查詢使用InfluxQL 函數 計算包含該單詞的數據庫中degrees
每一個度量的平均值。NOAA_water_database
temperature
> SELECT MEAN(water_level) FROM "h2o_feet" WHERE "location" =~ /[m]/ AND "water_level" > 3 name: h2o_feet time mean ---- ---- 1970-01-01T00:00:00Z 4.47155532049926
該查詢使用的InfluxQL 函數 來計算平均water_level
,其中標籤值的location
包括m
和water_level
是大於三。
> SELECT * FROM "h2o_feet" WHERE "location" !~ /./ >
查詢選擇標籤沒有值的h2o_feet
測量中的全部數據。每一個數據點中有一個標記值。location
NOAA_water_database
location
沒有正則表達式就能夠執行相同的查詢。有關 詳細信息,請參閱 常見問題解答文檔。
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" =~ /./ name: h2o_feet time mean ---- ---- 1970-01-01T00:00:00Z 4.442107025822523
該查詢使用InfluxQL 函數 計算water_level
具備標記值的全部數據 的平均值location
。
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND "level description" =~ /between/ name: h2o_feet time mean ---- ---- 1970-01-01T00:00:00Z 4.47155532049926
該查詢使用InfluxQL 函數 來計算water_level
字段值level description
包含該字的全部數據 的平均值between
。
> SELECT FIRST("index") FROM "h2o_quality" GROUP BY /l/ name: h2o_quality tags: location=coyote_creek time first ---- ----- 2015-08-18T00:00:00Z 41 name: h2o_quality tags: location=santa_monica time first ---- ----- 2015-08-18T00:00:00Z 99
該查詢使用InfluxQL 函數 爲index
包含l
其標記鍵中的字母的每一個標記選擇第一個值。
該SELECT
子句支持使用語法指定字段的類型和基本的強制轉換操做::
。
數據類型 | 演員行動 |
字段值能夠是浮點數,整數,字符串或布爾值。該::
語法容許用戶在查詢中指定字段的類型。
注意: 一般,沒必要在
SELECT
子句中指定字段值類型。在大多數狀況下,InfluxDB拒絕任未嘗試將字段值寫入 先前接受不一樣類型字段值的字段的寫入。字段值類型可能因分片組而異。在這些狀況下,可能須要在
SELECT
子句中指定字段值類型 。 有關InfluxDB如何處理字段值類型差別的更多信息,請參閱 常見問題解答文檔。
SELECT_clause <field_key>::<type> FROM_clause
type
能夠是float
,integer
,string
,或boolean
。在大多數狀況下,若是field_key
不存儲指定的數據,InfluxDB將不返回任何數據type
。有關更多信息,請參閱Cast操做。
> SELECT "water_level"::float FROM "h2o_feet" LIMIT 4 name: h2o_feet -------------- time water_level 2015-08-18T00:00:00Z 8.12 2015-08-18T00:00:00Z 2.064 2015-08-18T00:06:00Z 8.005 2015-08-18T00:06:00Z 2.116
該查詢返回water_level
浮動字段鍵的值。
該::
語法容許用戶在查詢中執行基本的強制轉換操做。目前,InfluxDB支持將字段值從整數轉換爲浮點數或從浮點數轉換爲整數。
SELECT_clause <field_key>::<type> FROM_clause
type
能夠是float
或integer
。
若是查詢嘗試將整數或浮點數轉換爲字符串或布爾值,InfluxDB不返回任何數據。
> SELECT "water_level"::integer FROM "h2o_feet" LIMIT 4 name: h2o_feet -------------- time water_level 2015-08-18T00:00:00Z 8 2015-08-18T00:00:00Z 2 2015-08-18T00:06:00Z 8 2015-08-18T00:06:00Z 2
查詢返回water_level
浮點字段值的整數形式。
> SELECT "water_level"::string FROM "h2o_feet" LIMIT 4 >
查詢不返回任何數據,由於還沒有支持將float字段值強制轉換爲字符串。
在InfluxDB中,查詢 自動合併系列。
該h2o_feet
測量在NOAA_water_database
是的兩部分串聯。第一個系列由h2o_feet
測量和location = coyote_creek
標籤組成。第二個系列由h2o_feet
測量和location = santa_monica
標籤組成。
如下查詢在計算平均值 時會自動合併這兩個系列water_level
:
> SELECT MEAN("water_level") FROM "h2o_feet" name: h2o_feet -------------- time mean 1970-01-01T00:00:00Z 4.442107025822521
若是隻想要water_level
第一個系列的平均值,請在WHERE
子句中指定相關標記:
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" = 'coyote_creek' name: h2o_feet -------------- time mean 1970-01-01T00:00:00Z 5.359342451341401
若是您想要water_level
每一個系列的平均值,請包含一個GROUP BY
子句:
> SELECT MEAN("water_level") FROM "h2o_feet" GROUP BY "location" name: h2o_feet tags: location=coyote_creek time mean ---- ---- 1970-01-01T00:00:00Z 5.359342451341401 name: h2o_feet tags: location=santa_monica time mean ---- ---- 1970-01-01T00:00:00Z 3.530863470081006
使用分號()分隔查詢中的多個SELECT
語句;
。
在InfluxDB的CLI中:
> SELECT MEAN("water_level") FROM "h2o_feet"; SELECT "water_level" FROM "h2o_feet" LIMIT 2 name: h2o_feet time mean ---- ---- 1970-01-01T00:00:00Z 4.442107025822522 name: h2o_feet time water_level ---- ----------- 2015-08-18T00:00:00Z 8.12 2015-08-18T00:00:00Z 2.064
子查詢是嵌套在FROM
另外一個查詢的子句中的查詢。使用子查詢將查詢做爲條件應用於封閉查詢中。子查詢提供相似於嵌套函數和SQL [ HAVING
子句](https://en.wikipedia.org/wiki/Having_ ( SQL ))的功能。
SELECT_clause FROM ( SELECT_statement ) [...]
InfluxDB首先執行子查詢,而後執行主查詢。
主查詢圍繞子查詢,至少須要SELECT
子句和FROM
子句。主查詢支持本文檔中列出的全部子句。
子查詢出如今主查詢的FROM
子句中,它須要包圍括號。子查詢支持本文檔中列出的全部子句。
InfluxQL支持每一個主查詢多個嵌套子查詢。多個子查詢的示例語法:
SELECT_clause FROM ( SELECT_clause FROM ( SELECT_statement ) [...] ) [...]
SUM()
幾個MAX()
值> SELECT SUM("max") FROM (SELECT MAX("water_level") FROM "h2o_feet" GROUP BY "location") name: h2o_feet time sum ---- --- 1970-01-01T00:00:00Z 17.169
查詢返回water_level
每一個標記值的最大值之和location
。
InfluxDB首先執行子查詢; 它計算water_level
每一個標籤值的最大值location
:
> SELECT MAX("water_level") FROM "h2o_feet" GROUP BY "location" name: h2o_feet tags: location=coyote_creek time max ---- --- 2015-08-29T07:24:00Z 9.964 name: h2o_feet tags: location=santa_monica time max ---- --- 2015-08-29T03:54:00Z 7.205
接下來,InfluxDB執行主查詢並計算這些最大值的總和:9.964
+ 7.205
= 17.169
。請注意,主查詢max
不是指定函數中water_level
的字段鍵SUM()
。
MEAN()
兩個字段之間的差別> SELECT MEAN("difference") FROM (SELECT "cats" - "dogs" AS "difference" FROM "pet_daycare") name: pet_daycare time mean ---- ---- 1970-01-01T00:00:00Z 1.75
查詢返回測量數量cats
和測量值之間差別dogs
的pet_daycare
平均值。
InfluxDB首先執行子查詢。子查詢計算cats
字段中的值與dogs
字段中的值之間的差別,並命名輸出列difference
:
> SELECT "cats" - "dogs" AS "difference" FROM "pet_daycare" name: pet_daycare time difference ---- ---------- 2017-01-20T00:55:56Z -1 2017-01-21T00:55:56Z -49 2017-01-22T00:55:56Z 66 2017-01-23T00:55:56Z -9
接下來,InfluxDB執行主查詢並計算這些差別的平均值。請注意,主查詢指定difference
爲MEAN()
函數中的字段鍵。
MEAN()
值並在這些平均值上放置條件> SELECT "all_the_means" FROM (SELECT MEAN("water_level") AS "all_the_means" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m) ) WHERE "all_the_means" > 5 name: h2o_feet time all_the_means ---- ------------- 2015-08-18T00:00:00Z 5.07625
查詢返回water_level
大於5 的字段的全部平均值。
InfluxDB首先執行子查詢。子查詢計算MEAN()
的值water_level
從2015-08-18T00:00:00Z
經過2015-08-18T00:30:00Z
並對結果進行分組到12分鐘的時間間隔。它還命名輸出列all_the_means
:
> SELECT MEAN("water_level") AS "all_the_means" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m) name: h2o_feet time all_the_means ---- ------------- 2015-08-18T00:00:00Z 5.07625 2015-08-18T00:12:00Z 4.950749999999999 2015-08-18T00:24:00Z 4.80675
接下來,InfluxDB執行主查詢並僅返回大於5的平均值。請注意,主查詢指定all_the_means
爲SELECT
子句中的字段鍵。
SUM()
幾個DERIVATIVE()
值> SELECT SUM("water_level_derivative") AS "sum_derivative" FROM (SELECT DERIVATIVE(MEAN("water_level")) AS "water_level_derivative" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m),"location") GROUP BY "location" name: h2o_feet tags: location=coyote_creek time sum_derivative ---- -------------- 1970-01-01T00:00:00Z -0.4950000000000001 name: h2o_feet tags: location=santa_monica time sum_derivative ---- -------------- 1970-01-01T00:00:00Z -0.043999999999999595
查詢返回water_level
每一個標記值的平均值的導數之和location
。
InfluxDB首先執行子查詢。子查詢計算water_level
以12分鐘爲間隔的平均值的導數。它爲每一個標記值執行該計算location
並命名輸出列water_level_derivative
:
> SELECT DERIVATIVE(MEAN("water_level")) AS "water_level_derivative" 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 water_level_derivative ---- ---------------------- 2015-08-18T00:12:00Z -0.23800000000000043 2015-08-18T00:24:00Z -0.2569999999999997 name: h2o_feet tags: location=santa_monica time water_level_derivative ---- ---------------------- 2015-08-18T00:12:00Z -0.0129999999999999 2015-08-18T00:24:00Z -0.030999999999999694
接下來,InfluxDB執行主查詢並計算water_level_derivative
每一個標記值的總和location
。請注意,主查詢指定water_level_derivative
,而不是water_level
或derivative
做爲SUM()
函數中的字段鍵。
InfluxQL支持每一個主查詢多個嵌套子查詢:
SELECT_clause FROM ( SELECT_clause FROM ( SELECT_statement ) [...] ) [...] ------------------ ---------------- Subquery 1 Subquery 2
InfluxQL不支持每一個子查詢多個SELECT
語句:
SELECT_clause FROM (SELECT_statement; SELECT_statement) [...]
若是子查詢包含多個SELECT
語句,則系統返回解析錯誤。