influxdb查询语法

一、参考

influxDB中文文档

二、写入测试数据

Sample Data

如上,下载测试数据

# 下载测试数据

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) FROMWHERELIMITOFFSET 子句是可选的

(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 语句需要一个 selectfrom 子句

4.2 select 子句

4.2.1 SLECT *

返回所有的 fieldtag

4.2.2 SELECT "<field_key>"

返回特定的 field

4.2.3 SELECT "<field_key>","<field_key>"

返回多个 field

4.2.4 SELECT "<field_key>","<tag_key>"

返回特定的 fieldtag

select 在包括一个 tag 时,必须至少指定一个field

4.2.5 SELECT "<field_key>"::field,"<tag_key>"::tag

返回特定的fieldtag

(1) ::[field | tag] 语法指定标识符的类型, 使用此语法来区分具有相同名称的 field keytag 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 *

对结果中的所有 taggroup by

6.1.1.2 GROUP BY <tag_key>

对结果按指定的 taggroup by

6.1.1.3 GROUP BY <tag_key>,<tag_key>

对结果数据按多个 taggroup 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的不同 locationwater_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 : locationrandtag, 所以结果和 6.1.2.2 相同

6.2 group by 时间间隔

原文地址:https://www.cnblogs.com/thewindyz/p/14079128.html