问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

InfluxDB基础教程:核心概念与基本操作详解

创作时间:
作者:
@小白创作中心

InfluxDB基础教程:核心概念与基本操作详解

引用
CSDN
1.
https://m.blog.csdn.net/2401_85763997/article/details/139748157

InfluxDB基础概念

InfluxDB是一种开源的时序数据库,主要用于存储和查询时间序列数据。在InfluxDB中,数据以特定的结构存储,主要包括以下几个核心概念:

  • time:每行记录都有一列time,这是主索引,用于记录时间戳,单位是纳秒,时区是UTC(东八区需要减8小时)。

  • fields:普通列,采用key-value结构,value的数据类型支持多种类型,包括float、integer、string和boolean。

  • tags:索引列,同样采用key-value结构,但value的数据类型只支持string。

fields和tags的key名称严格区分大小写。

fields数据类型注意事项

  • float:InfluxDB的fields默认是float浮点型。
  • integer:整型,insert语句中如果需要写入整型数据,需要在数值后面加个i。
  • string:字符串类型,insert语句中如果需要写入字符串,需要使用英文双引号包含数值。
  • boolean:布尔型,真可以用 t, T, true, True, TRUE 表示;假可以用 f, F, false, False 或者 FALSE 表示。

基本语法

InfluxDB的语法与MySQL有很多相似之处:

  • 查看所有数据库show databases
  • 建库create database dbname
  • 删库drop database daname
  • 切换使用数据库use dbname
  • 查看所有表show measurements
  • 建表+插入数据:无需单独建表,插入数据的同时建表,例如:
    insert xxx,tag1=1,tag2=www.aaa.com,tag3=2 field1=12i,field2="hhh",field=true
    
  • 删表drop measurement xxx

measurement的特殊性

measurement在使用时需要注意以下几点:

  1. measurement无需单独创建,在第一次插入数据时自动创建。
  2. measurement中无数据时,表也就不存在了。
  3. measurement没有update语句,无法修改measurement以及tags-key和fields-key名称,实际中如有需要只能删除整个measurement重新插入数据。不过也可以通过select * into newxxx from oldxxx,从旧表中查出数据导入到新表。可以在语句后面加上group by,这样就可以把tag复制过去了。

InfluxDB独有语法

  • show series:查询tag_key和tag_valalue
  • show tag keys:查看tags名称
  • show field keys:查看fields名称,不仅会显示fields名称结果集,还显示field的数据类型

注意:InfluxDB操作语句后面不需要加分号。

简单实战演练

insert语法要点

向measurement名为frontendExpCount插入数据:

insert frontendExpCount,appid=1030,browserType=1,expType=8,netType=4g,isPc=true domain="www.aaa.cn",expCnt=10i

这条简单的insert语句,却隐藏多个坑:

  • tags之间用逗号分隔,fields之间用逗号分隔,tags和fields之间用空格分隔
  • 除了必要的空格,insert后面的空格和tags和fields分隔空格,不能再有其他空格,否则会出现missing tag value的语法错误。
  • tags都是字符串类型,但是不用双引号括起来;fields中有字符串类型需要用英文双引号括起来,如果不用英文双引号,会报语法错误invalid boolean,会认为是无效的布尔值,因为布尔类型无需加双引号。
  • tags中设置布尔值就是字符串,fields中有布尔值,可用t, T, true, True, TRUE,f, F, false, False表示。
  • fields中有整型integer,需要在数值后面加i,否则会出现is type float, already exists as type integer dropped=1。

经测试,插入数据时,不能没有fields:

insert service_count,serviceName="UserSvr",hostname="dev5",qps=12.0
ERR: {"error":"unable to parse 'service_count,serviceName="UserSvr",hostname="dev5",qps=12.0': missing fields"}

经测试,插入数据时,只插入fields,可以没有tags:

insert service_count serviceName="UserSvr",hostname="dev5",qps=12.0

也可以理解,一个measurement里可以没有tags,但是不能没有fields。因为tags只是索引,并不是用于存储测量值的,而fields就是存储测量值的。

  • 有fields无tags,只是没有tags索引,还有主索引time,如果只用到time查询条件,可以没有tags,但是实际情况中需要对数据聚合等复杂性查询,就必须要有tags。fields也可以作为查询条件,但是查询性能很低,至于聚合group by后面只能tags和time。
  • 有tags无fields,一般情况tags并用于存储有价值的策略值,只是用于查询条件,没有fields,measurements也就没有意义了。
  • 若一个measurements中只有fields,此时想把某个field改为tags,是无法修改的,只能删表重来,或者select into从旧表批量导入数据到旧表

select简单查询

插入多条数据后,可用select语句查询数据:

select * from frontendExpCount where appid='1009'

select语法和mysql类似,支持where条件查询,group by聚合,order by排序,limit和一些聚合函数等。

需要注意:

  • select *可指定显示tag和field,如select appid, expCnt from frontendExpCount。
  • from后面可以跟多个measurements,如select * from xxx,xxx。
  • group by后面只能是tags和time。
  • order by只能对time排序。
  • 聚合之后不能使用limit。
  • where后面字符串用单引号,条件符支持=、!=、<>、>、>=、<、<=、正则等。

time格式化显示precision

可以看到select查出的数据time是一长串时间戳,可以输入precision rfc3339,然后执行select查询,即可显示格式化好的time:

不过看到显示的time,比当前时间少了8小时,可以在select语句后面指定时区tz('Asia/Shanghai'):

格式化显示查询数据

默认情况,select查询出来的记录是以column列的形式展示,可以执行format json,以json格式展示,不过这样显示的数据排版不是很好看:

可以执行pretty,让json格式的排版更好看:

完整json:

{
  "results": [
    {
      "series": [
        {
          "name": "frontendExpCount",
          "columns": [
            "time",
            "appid",
            "browserType",
            "domain",
            "expCnt",
            "expType",
            "isPc",
            "netType"
          ],
          "values": [
            [
              1603897585177504244,
              "1030",
              "1",
              "www.ddd.com",
              10,
              "8",
              "f",
              "4g"
            ],
            [
              1603897579786521226,
              "1030",
              "1",
              "www.ddd.com",
              10,
              "8",
              "t",
              "4g"
            ]
          ]
        }
      ]
    }
  ]
}
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号