zoukankan      html  css  js  c++  java
  • 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 时间间隔

  • 相关阅读:
    Django DRF 分页
    django DRF理解
    Docker使用
    基于Django+FastDFS文件管理系统搭建
    django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现
    Python协程理解——基于爬虫举例
    基于Python的大数据的分页模型代码
    NOIP模拟——矩阵分组
    NOIP模拟——聚会
    NOIP模拟——卡牌游戏
  • 原文地址:https://www.cnblogs.com/thewindyz/p/14079128.html
Copyright © 2011-2022 走看看