SELECT語句
SELECT語句從一個或多個measurement中查詢數據。
語法
SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]
語法描述
SELECT
語句需要一個SELECT
子句和一個FROM
子句。
SELECT子句
SELECT
子句支持多種指定數據的格式:
SELECT *
返回所有的field和tag。SELECT "<field_key>"
返回一個特定的field。SELECT "<field_key>","<field_key>"
返回多個field。SELECT "<field_key>","<tag_key>"
返回一個特定的field和一個特定的tag,當SELECT
子句包含tag時,它必須至少指定一個field。SELECT "<field_key>"::field,"<tag_key>"::tag
返回一個特定的field和一個特定的tag。::[field | tag]
語法指定了標識符的類型,使用這個語法是為了區分具有相同名字的field key和tag key。
除此之外,SELECT
子句支持的功能還有:算術運算、函數、轉換操作和正則表達式。
FROM子句
FROM
子句支持多種指定measurement的格式:
FROM <measurement_name>
從一個measurement中返回數據。如果您使用CLI查詢數據,那么訪問的measurement屬于USE
指定的數據庫,并且使用的是默認保留策略。如果您使用的是HTTP API,那么measurement屬于參數db
指定的數據庫,同樣,使用的是默認(DEFAULT
)的保留策略。
FROM <measurement_name>,<measurement_name>
從多個measurement中返回數據。
FROM <database_name>.<retention_policy_name>.<measurement_name>
從一個被完全限定的measurement中返回數據。通過明確指定measurement的數據庫和保留策略來完全限定一個measurement。
FROM <database_name>..<measurement_name>
從用戶指定的一個數據庫并使用默認保留策略的measurement中返回數據。
除此之外,FROM
子句還支持的功能:正則表達式。
引號
如果標識符包含除了[A-z,0-9,_]之外的字符,或者以數字開頭,又或者是InfluxQL關鍵字,那么它們必須使用雙引號。雖然并不總是需要,但是我們建議您為標識符加上雙引號。
這里關于引號的語法與行協議中的不同。
示例
查詢單個measurement中的所有field和tag
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
這個measurement中查詢所有的field和tag。
如果您使用CLI,請確保在執行上面的查詢前,先輸入USE NOAA_water_database
,CLI將查詢被USE
指定的數據庫并且保留策略是默認的數據。如果您使用的是HTTP API,那么請確保將參數db
設為NOAA_water_database
,如果沒有設置參數rp
,那么HTTP API將自動使用該數據庫的默認保留策略。
查詢單個measurement中的特定的field和tag
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
該查詢選擇了兩個field:level description
和water_level
,和一個tag:location
。
當SELECT
子句包含tag時,它必須至少指定一個field。
查詢單個measurement中的帶標識符類型的特定的field和tag
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
該查詢選擇了兩個field:level description
和water_level
,和一個tag:location
。::[field | tag]
語法明確指出了該標識符是field還是tag。當field key和tag key的名字相同時,請使用::[field | tag]
來區分它們。大多數情況下,并不需要使用該語法。
查詢單個measurement中的所有field
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
中選擇了所有的field。SELECT
子句支持將*
和::
這兩個語法結合使用。
查詢單個measurement中的特定的field并進行基本運算
SELECT ("water_level"*2)+4 from "h2o_feet"
name: h2o_feet
--------------
time water_level
2015-08-18T00:00:00Z20.24
2015-08-18T00:00:00Z8.128
[...]
2015-09-18T21:36:00Z14.132
2015-09-18T21:42:00Z13.876
該查詢將water_level
中的每個值乘以2,然后再加上4。
TSDB For InfluxDB?遵循標準的算術運算順序。可查看InfluxQL數學運算符章節了解更多相關信息。
查詢多個measurement中的所有數據
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
該查詢從兩個measurement(h2o_feet
和h2o_pH
)中選擇所有的field和tag,多個measurement之間用逗號(,
)隔開。
查詢完全限定的measurement中的所有數據
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
該查詢從h2o_feet
中選擇了所有數據,h2o_feet
是屬于數據庫NOAA_water_database
和保留策略autogen
的measurement。
如果使用CLI,可以用這種完全限定measurement的方式來代替USE
指定的數據庫和指定DEFAULT
之外的保留策略。如果使用HTTP API,可以通過完全限定measurement的方式,代替設置參數db
和rp
。
查詢特定數據庫的measurement中的所有數據
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
該查詢從h2o_feet
中選擇了所有數據,h2o_feet
是屬于數據庫NOAA_water_database
和默認(DEFAULT
)保留策略的measurement。..
表示指定數據庫的默認保留策略。
如果使用CLI,可以這種指定數據庫的方式來代替USE
指定的數據庫。如果使用HTTP API,同樣可以通過指定數據庫,代替設置參數db
。
SELECT
語句的常見問題
在SELECT子句中查詢tag key
一個查詢在SELECT
子句中必須至少包含一個field key才能返回結果。如果SELECT
子句中只包含一個或多個tag key,那么該查詢會返回一個空的結果。這種返回結果的要求是系統存儲數據的方式導致的。
示例
下面的查詢不返回任何數據,因為它在SELECT
子句中只給定了一個tag key(location
):
SELECT "location" FROM "h2o_feet"
想要返回跟tag key location
相關的數據,查詢中的SELECT
子句必須至少包含一個field key(water_level
):
SELECT "water_level","location" FROM "h2o_feet" LIMIT 3
name: h2o_feet
time water_level location
-----------------------
2015-08-18T00:00:00Z8.12 coyote_creek
2015-08-18T00:00:00Z2.064 santa_monica
[...]
2015-09-18T21:36:00Z5.066 santa_monica
2015-09-18T21:42:00Z4.938 santa_monica