全部产品

SELECT语句

更新时间:2020-07-28 23:48:14

SELECT语句从一个或多个measurement中查询数据。

语法

  1. 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

  1. > SELECT * FROM "h2o_feet"
  2. name: h2o_feet
  3. --------------
  4. time level description location water_level
  5. 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064
  6. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
  7. [...]
  8. 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066
  9. 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

  1. > SELECT "level description","location","water_level" FROM "h2o_feet"
  2. name: h2o_feet
  3. --------------
  4. time level description location water_level
  5. 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064
  6. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
  7. [...]
  8. 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066
  9. 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938

该查询选择了两个field:level descriptionwater_level,和一个tag:location。请注意,当SELECT子句包含tag时,它必须至少指定一个field。

查询单个measurement中的带标识符类型的特定的field和tag

  1. > SELECT "level description"::field,"location"::tag,"water_level"::field FROM "h2o_feet"
  2. name: h2o_feet
  3. --------------
  4. time level description location water_level
  5. 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064
  6. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
  7. [...]
  8. 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066
  9. 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938

该查询选择了两个field:level descriptionwater_level,和一个tag:location::[field | tag]语法明确指出了该标识符是field还是tag。当field key和tag key的名字相同时,请使用::[field | tag]来区分它们。大多数情况下,并不需要使用该语法。

查询单个measurement中的所有field

  1. > SELECT *::field FROM "h2o_feet"
  2. name: h2o_feet
  3. --------------
  4. time level description water_level
  5. 2015-08-18T00:00:00Z below 3 feet 2.064
  6. 2015-08-18T00:00:00Z between 6 and 9 feet 8.12
  7. [...]
  8. 2015-09-18T21:36:00Z between 3 and 6 feet 5.066
  9. 2015-09-18T21:42:00Z between 3 and 6 feet 4.938

该查询从h2o_feet中选择了所有的field。SELECT子句支持将*::这两个语法结合使用。

查询单个measurement中的特定的field并进行基本运算

  1. > SELECT ("water_level" * 2) + 4 from "h2o_feet"
  2. name: h2o_feet
  3. --------------
  4. time water_level
  5. 2015-08-18T00:00:00Z 20.24
  6. 2015-08-18T00:00:00Z 8.128
  7. [...]
  8. 2015-09-18T21:36:00Z 14.132
  9. 2015-09-18T21:42:00Z 13.876

该查询将water_level中的每个值乘以2,然后再加上4。请注意,TSDB For InfluxDB®遵循标准的算术运算顺序。可查看InfluxQL数学运算符章节了解更多相关信息。

查询多个measurement中的所有数据

  1. > SELECT * FROM "h2o_feet","h2o_pH"
  2. name: h2o_feet
  3. --------------
  4. time level description location pH water_level
  5. 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064
  6. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
  7. [...]
  8. 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066
  9. 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938
  10. name: h2o_pH
  11. ------------
  12. time level description location pH water_level
  13. 2015-08-18T00:00:00Z santa_monica 6
  14. 2015-08-18T00:00:00Z coyote_creek 7
  15. [...]
  16. 2015-09-18T21:36:00Z santa_monica 8
  17. 2015-09-18T21:42:00Z santa_monica 7

该查询从两个measurement(h2o_feeth2o_pH)中选择所有的field和tag,多个measurement之间用逗号(,)隔开。

查询完全限定的measurement中的所有数据

  1. > SELECT * FROM "NOAA_water_database"."autogen"."h2o_feet"
  2. name: h2o_feet
  3. --------------
  4. time level description location water_level
  5. 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064
  6. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
  7. [...]
  8. 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066
  9. 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的方式,代替设置参数dbrp

查询特定数据库的measurement中的所有数据

  1. > SELECT * FROM "NOAA_water_database".."h2o_feet"
  2. name: h2o_feet
  3. --------------
  4. time level description location water_level
  5. 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064
  6. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
  7. [...]
  8. 2015-09-18T21:36:00Z between 3 and 6 feet santa_monica 5.066
  9. 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):

  1. > SELECT "location" FROM "h2o_feet"
  2. >

想要返回跟tag key location相关的数据,查询中的SELECT子句必须至少包含一个field key(water_level):

  1. > SELECT "water_level","location" FROM "h2o_feet" LIMIT 3
  2. name: h2o_feet
  3. time water_level location
  4. ---- ----------- --------
  5. 2015-08-18T00:00:00Z 8.12 coyote_creek
  6. 2015-08-18T00:00:00Z 2.064 santa_monica
  7. [...]
  8. 2015-09-18T21:36:00Z 5.066 santa_monica
  9. 2015-09-18T21:42:00Z 4.938 santa_monica


InfluxDB® is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB®.