您的位置:

InfluxDB 语法详解

一、基本概念

InfluxDB 是一款开源的分布式时序数据库,采用 Go 语言编写。在 InfluxDB 中,数据被组织为不同的时间序列(time series),每个时间序列由一个时间戳和一个或多个键值对组成。

时间戳表示数据被写入数据库的时间,通常使用 Unix 时间戳表示。键值对分别表示数据的标签(tag)和数值(field)。标签用于标识数据,而字段则表示数据本身的数值。每个时间序列由唯一的时间戳和标签组成,字段则可以有多个。

二、数据结构

InfluxDB 中有三种数据结构:database,measurement 和 field。database 表示数据库,measurement 表示一组有关系的时间序列,而 field 则是一条时间序列中的一个键值对。

在 InfluxDB 中,数据库用于存储不同的时间序列,一个数据库可以包含多个 measurement。每个 measurement 是由标签、字段和时间戳组成的数据集合,标签用于标识数据,字段则表示数据本身的数值,时间戳表示数据的写入时间。

在 measurement 中,标签和字段是必须的,每个 measurement 至少有一个标签和一个字段。例如,在存储气象数据时,可以将气象站 ID 作为标签,温度和湿度作为字段。

三、查询语法

InfluxDB 支持多种查询方法,包括 SELECT、SHOW 和 DROP 等语句。

1. SELECT 语句

SELECT 语句用于从数据库中查询数据。

SELECT [DISTINCT] [*|field_key|function()|
   ] 
FROM 
     
[WHERE 
     ='
      ' [AND 
       
        ='
        
         ']] [GROUP BY 
         
          ] [ORDER BY time DESC|ASC] [LIMIT 
          
           ]| [OFFSET 
           
            ]]
           
          
         
        
       
      
     
    
   
  

SELECT 语句中,FROM 关键字后面需要指定要查询的 measurement 名称。WHERE 关键字用于对数据进行过滤,可以针对标签和时间进行过滤。GROUP BY 关键字根据指定的标签,对查询结果进行分组,time 列默认是一种特殊的标签,可以通过 GROUP BY time( ) 对数据进行按时间间隔分组。

以下是一个例子:

SELECT mean("temperature") AS "mean_temperature" FROM "weather" 
WHERE "location"='beijing' AND time >= now() - 1d group by time(10m)

该语句使用了 mean 函数对 temperature 字段进行平均值计算,并针对 location='beijing' ,在过去一天内查询每隔 10 分钟的平均气温。

2. SHOW 语句

SHOW 语句用于显示数据库、measurement、字段等对象的信息。

SHOW [DATABASES|FIELD KEYS|TAG KEYS|MEASUREMENTS []]

  

以下是一个例子:

SHOW MEASUREMENTS ON "mydb"

该语句显示 mydb 数据库中的所有 measurement 名称。

3. DROP 语句

DROP 语句用于删除 InfluxDB 中的数据、measurement 和数据库等对象。

DROP [, 
   ] 
FROM 
    

    
   
  

以下是一个例子:

DROP SERIES FROM "weather" WHERE "location"='beijing'

该语句删除 weather 数据库中,location='beijing' 的数据。

四、批量写入数据

InfluxDB 支持批量写入数据,提高了写入效率。

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary '
  cpu,host=server01,region=us-west value=0.64 1434067467000000000
  cpu,host=server02,region=us-west value=0.63 1434067467000000000
  cpu,host=server03,region=us-west value=0.65 1434067467000000000
'

该语句将三条数据分别写入 cpu 表格中,其中 host 和 region 是标签,value 是字段,1434067467000000000是时间戳。

五、高级特性

1. InfluxQL Functions

InfluxDB 支持多种函数,包括聚合函数、数学函数、字符串函数等。

SELECT COUNT("temperature"), MEAN("humidity") FROM "weather" 
WHERE time <= now() - 1h GROUP BY time(10m) fill(0)

该语句使用 COUNT 和 MEAN 函数计算出每隔10分钟的气温数量和平均湿度,并将结果填充为 0。

2. InfluxDB 持续查询

InfluxDB 允许用户创建持续查询,以定期执行 SELECT 语句。

CREATE CONTINUOUS QUERY  ON 
   
BEGIN 
    SELECT mean("temperature") AS "mean_temperature" 
    INTO "rollup_5m_temperature"
    FROM "weather"
    GROUP BY time(5m), "location"
END

   
  

该语句创建了一个名为 rollup_5m_temperature 的 measurement,每隔5分钟,将10分钟内的气温数据进行平均值计算,并按照 location 进行分组。

六、总结

InfluxDB 是一款优秀的时序数据库,支持灵活的数据结构和多种查询方法,支持批量写入和持续查询,使用时需要根据实际需求选择适当的语法进行操作。