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