前面几篇介绍了InfluxDB的添加,删除修改数据,接下来进入查询篇,掌握一定的SQL知识对于理解本篇博文有更好的帮助,下面在介绍查询的基础操作的同时,也会给出InfluxSql与SQL之间的一些差别
在开始之前,先看一下供查询的数据
> show measurements name: measurements name ---- yhh > select * from yhh name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889538654374538 26 http://blog.hhui.top 10 一灰灰 1563889547738266214 30 http://blog.hhui.top 11 一灰灰 1563889704754695002 30 http://blog.hhui.top 11 一灰灰2 1563889723440000821 30 http://blog.hhui.top 11 一灰灰3 110 > show tag keys from yhh name: yhh tagKey ------ name phone 复制代码
1. 基本查询
基本查询语法如下
SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>] 复制代码
上面的语法中,划分了select和from两块
select语句
select *
: 表示查询所有的field和tag对应的值select field_key
: 表示查询特定的field对应的值select tag_key
: 表示查询的特定的tag对应的值SELECT "<field_key>"::field,"<tag_key>"::tag
: 注意::field
和::tag
用来限定这个数据的类型为tag或者是field
from语句
from后面需要接上measurement,表示从这个mesaurement中查询数据
FROM <measurement_name>
从指定的measurement中获取数据FROM <measurement_name>,<measurement_name>
从多个measurement中获取数据FROM <database_name>.<retention_policy_name>.<measurement_name>
从某个数据库中某个保留策略中查询measurement中的数据
实例演示
下面给出几个简答的演示实例,分别介绍查询指定的field/tag的方式
> select age from yhh; name: yhh time age ---- --- 1563889538654374538 26 1563889547738266214 30 1563889704754695002 30 1563889723440000821 30 > select "age"::field, "name"::tag from yhh; name: yhh time age name ---- --- ---- 1563889538654374538 26 一灰灰 1563889547738266214 30 一灰灰 1563889704754695002 30 一灰灰2 1563889723440000821 30 一灰灰3 复制代码
2. 保留策略数据查询
上面的定义中,说明了可以查询指定保留策略中的数据,下面演示一下应该如何实现
# 创建保留策略 > create retention policy "1D" duration 1d on test # 插入一条数据 > insert into "1D" yhh,name=二灰,phone=119 email="bangzewu@126.com",blog="http://spring.hhui.top",id=27 # 查询 > select * from "1D".yhh name: yhh time blog email id name phone ---- ---- ----- -- ---- ----- 1565693045801509796 http://spring.hhui.top bangzewu@126.com 27 二灰 119 > 复制代码
查询语句和一般的select没有什么特别的区别,唯一需要注意的是measurement前面需要加上保留策略
3. Where语句
前面的查询主要是限定需要获取的数据,而我们实际的场景中,更多的是查询某类满足条件的数据,也就是常见的SQL中加上where查询条件限定
语法如下
SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]] 复制代码
主要看一下where后面的条件表达式,因为influxdb中的数据可以划分为两类,这两种不同的类型,在构建查询语句的时候,会有一些区别
field查询条件
我们已知field的类型有四种:string|int|boolean|float
,所以它支持的操作符有
操作符 | 说明 |
= |
相等 |
<> , != |
不相同 |
> , >= |
大于,大于等于 |
< , <= |
小于,小于等于 |
tag查询条件
在influxdb中tag都是string类型,会建立索引,所以基于tag的查询效率一般来讲是优于field查询的,它支持的操作符为
操作符 | 说明 |
= |
相等 |
<> , != |
不相同 |
在influxdb中没有in查询,不同的查询条件可以使用and/or来连接,表示同时满足or一个满足即可,下满给出几个简单的实例
# 根据field进行查询 > select * from yhh where age=26 name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889538654374538 26 http://blog.hhui.top 10 一灰灰 # 根据tag进行查询 > select * from yhh where phone!='' name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889723440000821 30 http://blog.hhui.top 11 一灰灰3 110 # 简单的运算查询 > select * from yhh where age + 2>30 name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889547738266214 30 http://blog.hhui.top 11 一灰灰 1563889704754695002 30 http://blog.hhui.top 11 一灰灰2 1563889723440000821 30 http://blog.hhui.top 11 一灰灰3 110 > select * from yhh where "name"='一灰灰' name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889538654374538 26 http://blog.hhui.top 10 一灰灰 1563889547738266214 30 http://blog.hhui.top 11 一灰灰 复制代码
4. 小结
这一小节内容,介绍的是最基础的inflxudb查询操作,和我们了解的SQL基本上没有太多的区别,可能唯一需要注意的就是制定保留策略查询时,需要使用"<retention policy>".<measurement>
的方式跟在from语句之后
其次一个需要注意的时,查询语句中,推荐的写法是
tag key
或field key
请使用双引号括起来- 如果类型为string,请用单引号把过滤条件括起来
如下面这种写法,否则可能会出现问题
select * from yhh where "name"='一灰灰' 复制代码
下一篇,我们将介绍查询语句中常见的分组,排序,分页等场景的使用姿势