influxdb查询语法
一、参考
二、写入测试数据
如上,下载测试数据
# 下载测试数据
curl https://s3.amazonaws.com/noaa.water-database/NOAA_data.txt -o NOAA_data.txt
将下载文件写入yzdb
数据库中
三、schema查询语法
3.1 show databases
返回当前实例上的所有的数据库
> show databases;
name: databases
name
----
_internal
mydb
yzdb
3.2 show retention policies
返回指定数据库的保留策略的列表
(1) 带有on
指定数据库
> show retention policies on yzdb
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
(2) 没有on
指定数据库,则需要先执行use
数据库
> use yzdb;
Using database yzdb
> show retention policies
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
3.3 show series
返回指定数据库的 series
列表
3.3.1 语法
SHOW SERIES [ON <database_name>] [FROM_clause] [WHERE <tag_key> <operator> [ '<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]
(1) ON <database_name>
是可选的
(2) 如果查询不包括 ON <database_name>
,则必须在 CLI
中使用 USE <database_name>
指定数据库, 或者在 HTTP API
请求中指定 db
查询字符串参数
(3) FROM
,WHERE
,LIMIT
和 OFFSET
子句是可选的
(4) WHERE
子句支持 tag
比较
(5) field
比较对 SHOW SERIES
查询无效
3.3.2 带有on的show series
> show series on yzdb;
key
---
average_temperature,location=coyote_creek
average_temperature,location=santa_monica
cpu_load_short,direction=in,host=server01,region=us-west
cpu_load_short,host=server02
cpu_load_short,host=server02,region=us-west
h2o_feet,location=coyote_creek
h2o_feet,location=santa_monica
h2o_pH,location=coyote_creek
h2o_pH,location=santa_monica
h2o_quality,location=coyote_creek,randtag=1
h2o_quality,location=coyote_creek,randtag=2
h2o_quality,location=coyote_creek,randtag=3
h2o_quality,location=santa_monica,randtag=1
h2o_quality,location=santa_monica,randtag=2
h2o_quality,location=santa_monica,randtag=3
h2o_temperature,location=coyote_creek
h2o_temperature,location=santa_monica
3.3.3 没有on的show series
同上,没有 on
,需要先执行 use
3.4 show measurements
返回指定数据库的 measurement
列表
3.4.1 语法
SHOW MEASUREMENTS [ON <database_name>] [WITH MEASUREMENT <regular_expression>] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]
3.4.2 查询 measurements列表
> show measurements
name: measurements
name
----
average_temperature
cpu_load_short
h2o_feet
h2o_pH
h2o_quality
h2o_temperature
>
3.5 show tag keys
返回指定数据库的 tag key
列表
3.5.1 语法
SHOW TAG KEYS [ON <database_name>] [FROM_clause] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]
3.5.2 show tag keys
> show tag keys from h2o_feet;
name: h2o_feet
tagKey
------
location
(1) 输出按 measurement
名称给 tag key
分组
(2) 通过 from
可以指定 measurement
3.6 show key values
返回数据库中指定 tag key
的 tag value
列表
3.6.1 语法
SHOW TAG VALUES [ON <database_name>][FROM_clause] WITH KEY [ [<operator> "<tag_key>" | <regular_expression>] | [IN ("<tag_key1>","<tag_key2")]] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]
3.6.2 查看 tag values
> show tag values with key = "randtag";
name: h2o_quality
key value
--- -----
randtag 1
randtag 2
randtag 3
3.7 show field keys
返回 field key
以及其 field value
的数据类型
3.7.1 语法
SHOW FIELD KEYS [ON <database_name>] [FROM <measurement_name>]
3.7.2 查询
> show field keys;
name: average_temperature
fieldKey fieldType
-------- ---------
degrees float
name: cpu_load_short
fieldKey fieldType
-------- ---------
value float
返回 每个 measurement
对应的 field key
以及其数据类型
3.8 show field keys 和 field 类型的差异
(1) field value
的数据类型在同一个shard
里面一样
(2) field value
的数据类型在多个 shard
里面可以不同
(3) show field keys
遍历每个 shard
返回与 field key
相关的每种数据类型
3.8.1 示例
假设 field
all_the_types
中存储了四个不同的数据类型, 则 show field keys
会返回四种数据类型:
> SHOW FIELD KEYS
name: mymeas
fieldKey fieldType
-------- ---------
all_the_types integer
all_the_types float
all_the_types string
all_the_types boolean
四、基本的SELECT语句
4.1 语法
SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]
(1) select
语句从特定的 measurement
中查询数据
(2) select
语句需要一个 select
和 from
子句
4.2 select 子句
4.2.1 SLECT *
返回所有的 field
和 tag
4.2.2 SELECT "<field_key>"
返回特定的 field
4.2.3 SELECT "<field_key>","<field_key>"
返回多个 field
4.2.4 SELECT "<field_key>","<tag_key>"
返回特定的 field
和 tag
select
在包括一个 tag
时,必须至少指定一个field
4.2.5 SELECT "<field_key>"::field,"<tag_key>"::tag
返回特定的field
和 tag
(1) ::[field | tag]
语法指定标识符的类型, 使用此语法来区分具有相同名称的 field key
和 tag key
4.3 from 子句
4.3.1 from <measurement_name>
从单个 measurement
返回数据
(1) 用 use
指定数据库
(2) 使用 default
存储策略
4.3.2 FROM <measurement_name>,<measurement_name>
从多个 measurement
中返回数据
4.3.3 FROM <database_name>.<retention_policy_name>.<measurement_name>
从一个完全指定的 measurement
中返回数据,这个完全指定是指指定了数据库和存储策略
4.3.4 FROM <database_name>..<measurement_name>
指定的数据库中返回存储策略为 default
的数据
4.4 引号
4.4.1 必须用双引号的场景
(1) 标识符包含除 [A-z,0-9,_]
之外的字符
(2) 以数字开头
(3) 是InfluxQL
关键字
建议总是使用双引号
4.5 查询示例
4.5.1 从单个measurement查询所有的field和tag
> select * from h2o_feet limit 3;
name: h2o_feet
time level description location water_level
---- ----------------- -------- -----------
1970-01-01T00:00:01.566Z below 3 feet santa_monica 2.064
1970-01-01T00:00:01.566Z between 6 and 9 feet coyote_creek 8.12
1970-01-01T00:00:01.56600036Z below 3 feet santa_monica 2.116
4.5.2 从单个measurement中查询特定tag和field
> select "level description","location","water_level" from h2o_feet limit 3;
name: h2o_feet
time level description location water_level
---- ----------------- -------- -----------
1970-01-01T00:00:01.566Z below 3 feet santa_monica 2.064
1970-01-01T00:00:01.566Z between 6 and 9 feet coyote_creek 8.12
1970-01-01T00:00:01.56600036Z below 3 feet santa_monica 2.116
4.5.3 从单个measurement中选择特定的tag和field,并提供其标识符类型
> select "level description"::field,"location"::tag,"water_level"::field from h2o_feet limit 3;
name: h2o_feet
time level description location water_level
---- ----------------- -------- -----------
1970-01-01T00:00:01.566Z below 3 feet santa_monica 2.064
1970-01-01T00:00:01.566Z between 6 and 9 feet coyote_creek 8.12
1970-01-01T00:00:01.56600036Z below 3 feet santa_monica 2.116
4.5.4 从单个measurement查询所有field
> select *::field from h2o_feet limit 3;
name: h2o_feet
time level description water_level
---- ----------------- -----------
1970-01-01T00:00:01.566Z below 3 feet 2.064
1970-01-01T00:00:01.566Z between 6 and 9 feet 8.12
1970-01-01T00:00:01.56600036Z below 3 feet 2.116
4.5.5 从measurement中选择一个特定的field并执行基本计算
> select ("water_level" * 2) + 4 from "h2o_feet" limit 3;
name: h2o_feet
time water_level
---- -----------
1970-01-01T00:00:01.566Z 20.24
1970-01-01T00:00:01.566Z 8.128
1970-01-01T00:00:01.56600036Z 20.01
4.5.6 从多个measurement中查询数据
> select * from "h2o_feet","h2o_pH" limit 3;
name: h2o_feet
time level description location pH water_level
---- ----------------- -------- -- -----------
1970-01-01T00:00:01.566Z below 3 feet santa_monica 2.064
1970-01-01T00:00:01.566Z between 6 and 9 feet coyote_creek 8.12
1970-01-01T00:00:01.56600036Z below 3 feet santa_monica 2.116
name: h2o_pH
time level description location pH water_level
---- ----------------- -------- -- -----------
1970-01-01T00:00:01.566Z coyote_creek 7
1970-01-01T00:00:01.566Z santa_monica 6
1970-01-01T00:00:01.56600036Z coyote_creek 8
4.5.7 从完全限定的measurement中选择所有数据
> select * from "yzdb"."autogen"."h2o_feet" limit 3;
name: h2o_feet
time level description location water_level
---- ----------------- -------- -----------
1970-01-01T00:00:01.566Z below 3 feet santa_monica 2.064
1970-01-01T00:00:01.566Z between 6 and 9 feet coyote_creek 8.12
1970-01-01T00:00:01.56600036Z below 3 feet santa_monica 2.116
4.5.8 从特定数据库中查询measurement的所有数据
> select * from "yzdb".."h2o_feet" limit 3;
name: h2o_feet
time level description location water_level
---- ----------------- -------- -----------
1970-01-01T00:00:01.566Z below 3 feet santa_monica 2.064
1970-01-01T00:00:01.566Z between 6 and 9 feet coyote_creek 8.12
1970-01-01T00:00:01.56600036Z below 3 feet santa_monica 2.116
4.6 select 语句常见问题
4.6.1 查询tag key
(1) 一个查询在 select
子句中至少需要一个 field key
来返回数据
(2) 如果 select
子句仅包含单个 tag key
或多个 tag key
,则查询返回一个空的结果
> select "location" from "h2o_feet";
>
五、where子句
六、group by 子句
group by
子句后面可以跟用户指定的 tags
或者是一个时间间隔
6.1 group by tags
6.1.1 语法
SELECT_clause FROM_clause [WHERE_clause] GROUP BY [* | <tag_key>[,<tag_key]]
6.1.1.1 GROUP BY *
对结果中的所有 tag
作 group by
6.1.1.2 GROUP BY <tag_key>
对结果按指定的 tag
作 group by
6.1.1.3 GROUP BY <tag_key>,<tag_key>
对结果数据按多个 tag
作 group by
,其中 tag key
的顺序没所谓
6.1.2 示例
6.1.2.1 对单个tag作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.359142420303907
name: h2o_feet
tags: location=santa_monica
time mean
---- ----
1970-01-01T00:00:00Z 3.5307120942458785
(1) 计算measurement h2o_feet
的不同 location
的water_level
的平均值
(2) 返回了两个series
, 分别是 location
的两个值
(3) 在InfluxDB
中,epoch 0(1970-01-01T00:00:00Z)
通常用作等效的空时间戳
(4) 如果要求查询不返回时间戳,InfluxDB
将返回 epoch 0
作为时间戳(如上)
6.1.2.2 对多个tag作group by
> select mean("index") from "h2o_quality" group by "location", "randtag" limit 1;
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
6.1.2.3 对所有tag作group by
> select mean("index") from "h2o_quality" group by * limit 1;
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
---- ----
(1) 因为measurement h2o_quality
中只有两个tag key
: location
和 randtag
, 所以结果和 6.1.2.2 相同
6.2 group by 时间间隔