前面几篇介绍了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 keyfield key请使用双引号括起来
  • 如果类型为string,请用单引号把过滤条件括起来

如下面这种写法,否则可能会出现问题

select * from yhh where "name"='一灰灰'

下一篇,我们将介绍查询语句中常见的分组,排序,分页等场景的使用姿势

II. 其他

0. 系列博文

参考博文

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

Influx Sql系列教程八:query数据查询基本篇的更多相关文章

  1. Influx Sql系列教程九:query数据查询基本篇二

    前面一篇介绍了influxdb中基本的查询操作,在结尾处提到了如果我们希望对查询的结果进行分组,排序,分页时,应该怎么操作,接下来我们看一下上面几个场景的支持 在开始本文之前,建议先阅读上篇博文: 1 ...

  2. Influx Sql系列教程七:delete 删除数据

    前面介绍了使用insert实现新增和修改记录的使用姿势,接下来我们看一下另外一个简单的使用方式,如何删除数据 1. delete 语句 delete的官方语法如下 DELETE FROM <me ...

  3. Influx Sql系列教程六:insert 修改数据

    在influxdb中没有专门的修改数据的update语句,对于influxdb而言,如果想修改数据,还是得使用我们前面的说到的insert来实现,那么怎么判断一条insert语句是插入还是修改呢? 1 ...

  4. Influx Sql系列教程五:insert 添加数据

    接下来开始进入influxdb的curd篇,首先我们看一下如何添加数据,也就是insert的使用姿势 在进入本篇之前,对于不了解什么是retention policy, tag, field的同学,有 ...

  5. Influx Sql系列教程四:series/point/tag/field

    influxdb中的一条记录point,主要可以分为三类,必须存在的time(时间),string类型的tag,以及其他成员field:而series则是一个measurement中保存策略和tag集 ...

  6. Influx Sql系列教程三:measurement 表

    在influxdb中measurement相当于mysql中的表,可以理解为一条一条记录都是存与measurent中的,一个数据库中可以有多个measurement,一个measurement中可以存 ...

  7. Influx Sql系列教程二:retention policy 保存策略

    retention policy这个东西相比较于传统的关系型数据库(比如mysql)而言,是一个比较新的东西,在将表之前,有必要来看一下保存策略有什么用,以及可以怎么用 I. 基本操作 1. 创建re ...

  8. Influx Sql系列教程零:安装及influx-cli使用姿势介绍

    influxdb 时序数据库,因为实际业务中使用到了,然而并没有发现有特别好的文章,完整的介绍influx sql的使用姿势,因此记录下实际开发中学习的体会,主要参考来自于官方文档 Influx Qu ...

  9. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. tensorflow API _ 4 (优化器配置)

    """Configures the optimizer used for training. Args: learning_rate: A scalar or `Tens ...

  2. [Ignatius and the Princess III] 整数的无序拆分(DP + 生成函数)

    整数的有序拆分就是隔板法,无序拆分则有两种处理方法 DP递推 我们假设P(n,m)P(n,m)P(n,m)是正整数nnn无序拆分为mmm个正整数的方案数 对于某一种拆分,不妨将拆分出来的mmm个数从小 ...

  3. LOJ P10008 家庭作业 题解

    每日一题 day45 打卡 Analysis 这道题跟LOJ P10004 一样,但是数据范围不同,不允许O(n²) 的贪心算法通过. 我们可以加一个limit 来判断这个截止期限已经不行了,所以以后 ...

  4. 为啥用DTO

    0.部分参数对于开发前端的人来说是无意义的,因为传递也没有效果.所以不应该暴露给前端使用. 1.依据现有的类代码,即可方便的构造出DTO对象,而无需重新进行分析. 2.减少请求次数,大大提高效率. 3 ...

  5. Visual C++ 里的异常处理

    微软Visual C++是Win32最广泛使用的编译器,因此Win32反向器对其内部工作非常熟悉.能够识别编译器生成的粘合代码有助于快速集中于程序员编写的实际代码.它还有助于恢复程序的高级结构.我将集 ...

  6. bootstrap轮播图组件

    一.轮播图组件模板(官方文档) <div id="carousel-example-generic" class="carousel slide" dat ...

  7. CF 768B

    CF 768B题意:In each operation Sam must remove any element x, such that x>1, from the list and inser ...

  8. 【luoguP2371】 [国家集训队]墨墨的等式

    题目链接 考虑将所有的\(a_1x_1+a_2x_2+--+a_nx_n=B\)对\(a_1\)取模,那么所有可达到的B就分为了\(0\)~\(a_1-1\)类 如果对\(a_1\)取模为\(k\)的 ...

  9. Linux 文件压缩、打包

    文件压缩 计算机使用byte单位来计量.实际上,计算机最小的计量单位是bit.1byte = 8 bit.如果记录1这个数字,00000001,1会在最右边占一个1个bit 其他7个bit会被填上0. ...

  10. 用DLL方式封装MDI子窗体

    用DLL方式封装MDI子窗体是一种常用的软件研发技术,他的长处: 研发人员能够负责某一个模块的编写包括(界面+逻辑),能够互不干扰,模块研发完成后,主程式统一调用. 易于程式升级,当程式升级时,不用编 ...