使用influxQL進行數據檢索(說明)

非官方:InfluxDB 基本命令操做文檔html

原地址:https://docs.influxdata.com/influxdb/v1.6/query_language/data_exploration/#order-by-time-descgit

警告!此頁面記錄了再也不積極開發的InfluxDB的早期版本。InfluxDB v1.7InfluxDB的最新穩定版本。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
 
在6到9英尺之間
 
coyote_creek
 
8.005
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_creeksanta_monica測量還有兩個字段: level description存儲字符串字段值 並water_level存儲浮點字段值。全部這些數據都在NOAA_water_database 數據庫中api

免責聲明:level description字段不是原始NOAA數據的一部分 - 爲了擁有一個具備特殊字符和字符串字段值的字段鍵,咱們將其隱藏在那裏。

基本的SELECT語句

SELECT語句查詢來自特定測量或測量的數據。

句法

SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]

語法描述

SELECT聲明須要一個SELECT條款和一個FROM條款。

SELECT 條款

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數據庫中的度量 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

查詢測量中選擇全部字段和 標記h2o_feet

若是您使用的是CLI,請確保USE NOAA_water_database在運行查詢以前輸入 CLI查詢USEd數據庫中的數據和 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中,徹底限定度量以查詢除USEd數據庫之外的數據庫和保留策略之外的 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中,指定數據庫以查詢除USEd數據庫以外的 數據庫中的數據。在HTTP API中,根據須要指定數據庫以代替使用db查詢字符串參數。

SELECT語句的常見問題

在SELECT子句中選擇標記鍵

查詢至少須要一個場關鍵 的在SELECT返回數據的條款。若是該SELECT子句僅包含單個標記鍵或多個標記鍵,則查詢將返回空響應。此行爲是系統存儲數據的結果。

如下查詢不返回任何數據,由於它locationSELECT子句中指定了單個標記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條款

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.1452241942262-04-11T23:47:16.854775806ZUTC之間對於SELECT帶有GROUP BY time()子句的語句,默認時間範圍介於1677-09-21 00:12:43.145224194UTC和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須要在子句中圍繞標記值使用單引號locationsanta_monicaWHERE

選擇具備特定字段鍵值和標記鍵值的數據

> 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標記鍵測量 數據locationsanta_monica以及字段值 water_level小於-0.59或大於9.95的數據。WHERE子句支持運營商ANDOR,並支持用括號分開的邏輯。

選擇具備特定時間戳的數據

> 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時間間隔: 基本語法 高級語法 GROUP BY時間間隔和fill()

GROUP BY標籤

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爲每一個 變量值locationh2o_feet 測量InfluxDB以兩個系列返回結果:每一個標籤值對應一個location

注意:在InfluxDB中,epoch 01970-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 randtagh2o_qualityGROUP 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 中的查詢結果相同,其中咱們明確指定了locationrandtag標記鍵。這是由於h2o_quality測量只有兩個標籤鍵。

GROUP BY時間間隔

GROUP BY time() 查詢按用戶指定的時間間隔對查詢結果進行分組。

基本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_interval5m基團查詢結果劃分爲橫跨在指定的時間範圍內的五分鐘時間組WHERE子句

fill(<fill_option>)

fill(<fill_option>)是可選的。它會更改報告的沒有數據的時間間隔值。有關 詳細信息,請參閱GROUP BY時間間隔fill()

覆蓋範圍:

基本GROUP BY time()查詢依賴於time_intervalInfluxDB的預設時間邊界,以肯定每一個時間間隔中包含的原始數據以及查詢返回的時間戳。

基本語法的示例

如下示例使用如下示例數據的子示例:

> 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
將查詢結果分組爲12分鐘
> SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)

name: h2o_feet
--------------
time                   count
2015-08-18T00:00:00Z   2
2015-08-18T00:12:00Z   2
2015-08-18T00:24:00Z   2

該查詢使用InfluxQL 函數 計算water_level帶有標記 點數,location = coyote_creek並將其組結果分爲12分鐘。

每一個時間戳的結果 表明一個12分鐘的間隔。第一個時間戳的計數涵蓋了之間2015-08-18T00:00:00Z 和之間的原始數據,但不包括2015-08-18T00:12:00Z第二個時間戳的計數涵蓋了之間2015-08-18T00:12:00Z 和之間的原始數據,但不包括,2015-08-18T00:24:00Z.

將查詢結果分組爲12分鐘,並經過標記鍵
> 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 BYWHERE子句中任什麼時候間條件無關的間隔在計算結果時,全部返回的數據必須在查詢的顯式時間範圍內發生,但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

高級GROUP BY time()語法

句法

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_intervaloffset_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
將查詢結果分組爲18分鐘,並將預設時間邊界向前移動
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(18m,6m)

name: h2o_feet
time                   mean
----                   ----
2015-08-18T00:06:00Z   7.884666666666667
2015-08-18T00:24:00Z   7.502333333333333
2015-08-18T00:42:00Z   7.108666666666667

該查詢使用InfluxQL 函數 計算平均water_level分組結果爲18分鐘的時間間隔,並將預設時間邊界偏移六分鐘。

時間界限,並返回時間戳查詢,而不offset_interval堅持InfluxDB預設的時間界限。讓咱們首先檢查沒有偏移的結果:

> SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:06:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(18m)

name: h2o_feet
time                   mean
----                   ----
2015-08-18T00:00:00Z   7.946
2015-08-18T00:18:00Z   7.6323333333333325
2015-08-18T00:36:00Z   7.238666666666667
2015-08-18T00:54:00Z   6.982

時間界限,並返回時間戳查詢,而不將 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.0057.887 2015-08-18T00:00:00Z
2 time >= 2015-08-18T00:18:00Z AND time < 2015-08-18T00:36:00Z < - 相同 7.7627.6357.5 2015-08-18T00:18:00Z
3 time >= 2015-08-18T00:36:00Z AND time < 2015-08-18T00:54:00Z < - 相同 7.3727.2347.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.0057.887)都落在第一個GROUP BY time()間隔內和第一個時間邊界內。請注意,雖然返回的時間戳發生在查詢的時間範圍開始以前,但查詢結果會排除在查詢的時間範圍以前出現的數據。

第二個預設的18分鐘時間邊界從開始到00:18結束 00:36三個原始點(7.7627.6357.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.0057.8877.762 2015-08-18T00:06:00Z
2 time >= 2015-08-18T00:24:00Z AND time < 2015-08-18T00:42:00Z < - 相同 7.6357.57.372 2015-08-18T00:24:00Z
3 time >= 2015-08-18T00:42:00Z AND time < 2015-08-18T01:00:00Z < - 相同 7.2347.116.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強制第四個時間邊界超出查詢的時間範圍,所以查詢不會返回該最後一個時間間隔的結果。

將查詢結果分組爲12分鐘,並將預設時間邊界移回
> 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.0057.887 2015-08-18T00:00:00Z
2 time >= 2015-08-18T00:18:00Z AND time < 2015-08-18T00:36:00Z < - 相同 7.7627.6357.5 2015-08-18T00:18:00Z
3 time >= 2015-08-18T00:36:00Z AND time < 2015-08-18T00:54:00Z < - 相同 7.3727.2347.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.0057.887)都落在第一個GROUP BY time()間隔內和第一個時間邊界內。請注意,雖然返回的時間戳發生在查詢的時間範圍開始以前,但查詢結果會排除在查詢的時間範圍以前出現的數據。

第二個預設的18分鐘時間邊界從開始到00:18結束 00:36三個原始點(7.7627.6357.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.0057.8877.762 2015-08-18T00:06:00Z
3 time >= 2015-08-18T00:24:00Z AND time < 2015-08-18T00:42:00Z < - 相同 7.6357.57.372 2015-08-18T00:24:00Z
4 time >= 2015-08-18T00:42:00Z AND time < 2015-08-18T01:00:00Z < - 相同 7.2347.116.982 2015-08-18T00:42:00Z

負12分鐘偏移間隔將預設邊界的時間範圍移回,使得邊界時間範圍和相關GROUP BY time()間隔時間範圍始終相同。使用偏移量,每一個間隔執行三個點的計算,而且返回的時間戳匹配邊界時間範圍的開始和GROUP BY time()間隔時間範圍的開始

請注意,offset_interval強制第一個時間邊界超出查詢的時間範圍,所以查詢不會返回該第一個時間間隔的結果。

將查詢結果分組爲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,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.0057.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

fill_option

任何數值報告沒有數據的時間間隔的給定數值。

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條款

INTO子句將查詢結果寫入用戶指定的度量

句法

SELECT_clause INTO <measurement_name> FROM_clause [WHERE_clause] [GROUP_BY_clause]

語法描述

INTO子句支持幾種指定測量的格式

INTO <measurement_name>            將數據寫入指定的測量值。若是您正在使用CLI,則 InfluxDB會將數據寫入USE數據庫中的度量 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_databaseautogen保留策略中的全部數據寫入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數據庫DEFAULT 保留策略若是您使用的HTTP API,InfluxDB將數據寫入到指定的數據庫和保留策略dbrp查詢字符串參數若是未設置rp查詢字符串參數,則HTTP API會自動將數據寫入數據庫的DEFAULT保留策略。

響應顯示7605InfluxDB寫入的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_2InfluxDB將數據寫入where_else數據庫和autogen 保留策略。請注意這兩個where_elseautogen以前運行必須存在INTO 查詢。有關 如何管理數據庫和保留策略,請參閱數據庫管理

響應顯示7605InfluxDB寫入的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測量結果。

響應顯示3InfluxDB寫入的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_elseautogen以前運行必須存在INTO 查詢。有關 如何管理數據庫和保留策略,請參閱數據庫管理

響應顯示5InfluxDB寫入where_else 數據庫的點數(autogen保留策略。響應中的時間戳沒有意義; InfluxDB使用epoch 0(1970-01-01T00:00:00Z)做爲等效的空時間戳。

該查詢是使用反向引用進行下采樣的示例。它從多個測量中獲取更高精度的數據,將這些數據聚合到更低的精度,並將較低精度的數據存儲在數據庫中。使用反向引用進行下采樣是該INTO子句的常見用例

INTO條款的常見問題

缺失數據

若是INTO查詢子句中包含標記鍵,則查詢會將當前度量中的標記轉換爲目標度量中的字段這可能致使InfluxDB覆蓋先前由標記值區分的請注意,此行爲不適用於使用函數的查詢「 常見問題解答」 文檔詳細描述了該行爲。SELECTTOP()BOTTOM()

將當前度量中的標記保留爲目標度量中GROUP BY的標記, 相關標記鍵查詢GROUP BY *中的標記INTO

使用該INTO子句自動執行查詢

INTO本文檔中子句部分顯示瞭如何使用INTO子句手動實現查詢有關 如何自動執行實時數據的子句查詢,請參閱Continuous Queries文檔INTO其餘用途中,Continuous Queries自動執行下采樣過程。

按時間順序DESC

缺省狀況下,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子句以後WHEREGROUP 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最後一個。

首先返回最新的點幷包含GROUP BY time()子句

> 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條款

LIMITSLIMIT限制每一個查詢返回的 點數和 系列數。

LIMIT條款

LIMIT <N>返回指定測量的第一個N 

句法

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 測量

限制返回的數字點幷包含GROUP BY子句

> 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

限制返回的系列數,幷包含GROUP BY time()子句

> 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和SLIMIT

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將返回該測量的全部系列。

有一個持續的問題須要查詢LIMITSLIMIT包括GROUP BY *請注意,LIMITSLIMIT子句必須按照上面語法中列出的順序出現。

例子

限制返回的點數和系列數

> 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

限制返回的點數和系列數,幷包含GROUP BY time()子句

> 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條款

OFFSETSOFFSET分頁系列返回。

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返回時間戳超出該時間範圍的點。

例子

Paginate點

> 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,則返回該測量的第一,第二和第三點。

Paginate指出幷包括幾個條款

> 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不返回任何結果

例子

Paginate系列

> 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 1h2o_feetlocation = coyote_creek

Paginate系列包括全部條款

> 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語法,而且它須要單引號。

例子

返回芝加哥時區的UTC偏移量

> 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:00America/Chicago

時間語法

對於大多數SELECT語句,默認時間範圍介於UTC 1677-09-21 00:12:43.1452241942262-04-11T23:47:16.854775806ZUTC之間對於SELECT帶有GROUP BY time()子句的語句,默認時間範圍介於1677-09-21 00:12:43.145224194UTC和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問題

rfc3339_date_time_string

'YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ'

.nnnnnnnnn是可選的,.000000000若是不包含,則設置爲RFC3339時間串須要單引號。

rfc3339_like_date_time_string

'YYYY-MM-DD HH:MM:SS.nnnnnnnnn'

HH:MM:SS.nnnnnnnnn.nnnnnnnnn是可選的,00:00:00.000000000若是不包含,則設置爲相似RFC3339的日期時間字符串須要單引號。

epoch_time

紀元時間是自1970年1月1日星期四00:00:00世界協調時間(UTC)以來通過的時間量。

默認狀況下,InfluxDB假定全部紀元時間戳都以納秒爲單位。 在紀元時間戳的末尾包括持續時間文字,以指示除納秒以外的精度。

基本算術

全部時間戳格式都支持基本算術。從具備持續時間字面值的時間戳添加(+)或減去(-)時間請注意,InfluxQL須要在or 和duration文本之間有一個空格+-

例子

使用RFC3339日期時間字符串指定時間範圍

> 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日期時間字符串周圍的單引號是必需的。

使用相似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 持續時間的文字是在信號出現時間標記的結束指示該曆元時間戳是在秒。

對相似RFC3339的日期時間字符串執行基本算術運算

> 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須要。

相對時間

使用now()與查詢數據的時間戳相對於服務器的當前時間戳。

句法

SELECT_clause FROM_clause WHERE time <operator> now() [[ - | + ] <duration_literal>] [(AND|OR) now() [...]]

語法描述

now()是在該服務器上執行查詢時服務器的Unix時間。之間的空白-+持續時間文字是必需的。

支持運營商

=   等於 <> 不等於 != 不等於 >   大於 >= 大於或等於 <   小於 <= 小於或等於

duration_literal

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不支持ORWHERE子句中使用運算符來指定多個時間間隔。

有關更多信息,請參閱常見問題解答

查詢now()帶有GROUP BY time()子句後發生的數據

大多數SELECT語句的默認時間範圍介於UTC 1677-09-21 00:12:43.1452241942262-04-11T23:47:16.854775806ZUTC之間對於SELECT帶有GROUP BY time()子句的語句,默認時間範圍介於1677-09-21 00:12:43.145224194UTC和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:00Z180周和之間的數據 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 APIRFC3339格式返回時間戳使用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子句中指定字段鍵和標記鍵

> 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子句中使用函數指定字段鍵

> 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

使用正則表達式在FROM子句中指定度量

> 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_databasetemperature

使用正則表達式在WHERE子句中指定標記值

> 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 包括mwater_level是大於三。

使用正則表達式在WHERE子句中指定沒有值的標記

> SELECT * FROM "h2o_feet" WHERE "location" !~ /./
>

查詢選擇標籤沒有值h2o_feet測量中的全部數據每一個數據有一個標記值locationNOAA_water_databaselocation

沒有正則表達式就能夠執行相同的查詢。有關 詳細信息,請參閱 常見問題解答文檔。

使用正則表達式在WHERE子句中指定具備值的標記

> 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

使用正則表達式在WHERE子句中指定字段值

> 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

使用正則表達式在GROUP BY子句中指定標記鍵

> 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能夠是floatintegerstring,或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能夠是floatinteger

若是查詢嘗試將整數或浮點數轉換爲字符串或布爾值,InfluxDB不返回任何數據。

例子

將float字段值轉換爲整數

> 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.9647.20517.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測量值之間差別dogspet_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執行主查詢並計算這些差別的平均值。請注意,主查詢指定differenceMEAN()函數中的字段鍵

計算多個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_level2015-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_meansSELECT子句中的字段鍵

計算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_levelderivative做爲SUM()函數中的字段鍵

子查詢的常見問題

子查詢中的多個SELECT語句

InfluxQL支持每一個主查詢多個嵌套子查詢:

SELECT_clause FROM ( SELECT_clause FROM ( SELECT_statement ) [...] ) [...]
                     ------------------   ----------------
                         Subquery 1          Subquery 2

InfluxQL不支持每一個子查詢多個SELECT語句

SELECT_clause FROM (SELECT_statement; SELECT_statement) [...]

若是子查詢包含多個SELECT語句,則系統返回解析錯誤

相關文章
相關標籤/搜索