本文翻譯自官網,官網地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/)
基本語法如下:
SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]
可見,select語句是由SELECT子句和FROM子句組成的。
一、SELECT子句
在SELECT字句中,有如下幾種形式,分別用於查詢各種指定的數據:
語法 | 意思 |
---|---|
SELECT * | 查詢measurement中所有的fields和 tags。示例sql:select * from h2o_feet; |
SELECT "<field_key>" | 查詢指定的一個field。示例sql:select water_level from h2o_feet; |
SELECT "<field_key>","<field_key>" | 查詢多個field。示例sql:select "level description", "water_level" from h2o_feet; |
SELECT "<field_key>","<tag_key>" | 查詢指定的field和tag。示例sql:select water_level,location from h2o_feet; 注:在SELECT子句中,如果包含了tag,那么此時就必須指定至少一個field。比如如下的sql就是錯誤的,因為它只select了一個tag,而沒有field:select location from h2o_feet; |
SELECT "<field_key>"::field,"<tag_key>"::tag | 跟上面一樣,也是查詢指定的field和tag。 ::[field | tag]語法用來指定標識符的類型,因為有時候tag和field有可能同名,因此用 ::[field | tag]語法來加以區分。 |
在SELECT子句中,還包含數學運算、聚合函數、基本的類型轉換、正則表達式等。
二、FROM子句
FROM子句用於指定要查詢的measurement,支持的語法如下:
語法 | 意思 |
---|---|
FROM <measurement_name> | 從指定measurement中查詢數據。這種方式會從當前DB、默認retention policy的measurement中查詢數據。 |
FROM <measurement_name>,<measurement_name> | 從多個measurement中查詢數據 |
FROM <database_name>.<retention_policy_name>.<measurement_name> | 從指定DB、指定retention policy的measurement中查詢數據 |
FROM <database_name>..<measurement_name> | 從指定DB、默認retention policy的measurement 中查詢數據 |
FROM子句中還支持正則表達式。
關於引號
如果measurement、tag、field等的標識符除了[A-z,0-9,_]之外,還有其他字符,或者標識符是keyword關鍵字,那么在引用的時候必須加上雙引號。比如在表 h2o_feet 中,"level description"就是一個帶有空格的field,如此一來在查詢到的時候,就必須加上雙引號了。如下圖,在查詢level description時若不加雙引號,則會報錯。
官方推薦,雖然有些標識符不是必須使用雙引號,但是推薦對所有標識符使用雙引號!
示例sql
-
從單個measurement中查詢該measurement所有的tag和field
-
從單個measurement中查詢指定的tag和field
-
從單個measurement中查詢指定的tag和field,並指定它們的標識類型
這種方式一般使用較少。 -
從measurement中查詢所有的field
The SELECT clause supports combining the * syntax with the :: syntax. -
在查詢時進行基本的數學運算
InfluxDB遵循標准的四則運算規則。更多操作詳見Mathematical Operators。 -
同時從多個measurement中查詢它們的所有數據
-
從一個全路徑的measurement中查詢數據
可見,所謂的全路徑,其實就是指在FROM子句中,指定了measurement所在的DB,以及要查詢數據所在的retention policy。 -
查詢指定數據庫中的measurement的數據
The query selects data in the NOAA_water_database, the DEFAULT retention policy, and the h2o_feet measurement. The .. indicates the DEFAULT retention policy for the specified database.
關於SELECT語句的常見疑問
在SELECT 子句中,必須要有至少一個field key!如果在SELECT子句中只有一個或多個tag key,那么該查詢會返回空。這是由InfluxDB底層存儲數據的方式所導致的結果。
示例:
上面的查詢結果返回為空,是因為在它的SELECT子句中,只查詢了location這個tag key。
如果想要查詢跟location這個tag key有關的任何數據,則在SELECT字句中必須至少要包含一個field key,如下: