美文网首页
时序数据库 Influxdb 中 in 的替换用法,多表查询

时序数据库 Influxdb 中 in 的替换用法,多表查询

作者: 程就人生 | 来源:发表于2022-03-26 10:06 被阅读0次

说到 in 关键字,小伙伴们肯定再熟悉不过了,它可是关系型数据库查询语句中的常用关键字。例:

select * from user where user_name in ('张三','李四','王五');

如果在时序数据库中,也遇到了 in 的使用场景,这该怎么办?尝试过的小伙伴都知道,在时序数据库是无法使用 in 关键字的,虽然它还是保留字。那么,只能寻找其他替代方案了,现在就来说说其他的替代方案。1. 针对单个tag的多条件匹配,可以使用正则表达式;

示例:

select * from measurement_name where tagName =~/^张三|王五$/;

执行语句:

select * from mtest where companyId='001' and deviceId =~/^001|002$/;

注意事项:

  • 正则表达式里不需要加引号;

  • 该用法只支持tag,如果换成field不可以。

  • 顺便温习一下正则表达式中各个符号的含义:
    // 正则表达式主体被包含双斜杠中;
    ^ 匹配输入字符串开始的位置;
    | 代表或,指明多项之间的一个选择;
    $ 匹配输入字符串结束的位置。

有小伙伴说:我的查询语句可不只是一个字段的多个条件那么简单,我还需要按照时间降序排序,取每个tag的第一条记录,也就是最新记录。

难度升级了,这就是我们要说的第二个问题,分组 + 排序 + 最新的一条记录;还拿上面的数据为例,我们要查出companyId下的所有设备的最新采集数据。

2. 分组 + 排序 + 最新记录; 示例:

select * from measurement_name where tagName =~/^张三|王五$/ group by tagName order by time desc limit 1;
图片

执行语句:

select * from mtest where companyId='001' and deviceId =~/^001|002$/ group by deviceId order by time desc limit 1;

还有同学说:我的查询语句不是一个字段的多个条件,是多个字段的多个条件,而且还涉及到分组 + 排序。还拿上面的数据为例,我们要查出所有公司下的所有设备的最新采集数据。

3. 多个tag分组 + 排序 + 最新的一条记录;示例:

select * from measurement_name group by tagName, tagName1 order by time desc limit 1;
图片

执行语句:

select * from mtest group by companyId,deviceId order by time desc limit 1;

4. 多条件 + 分组 + 排序 + 最新的一条记录;

示例1:

select * from measurement_name ((tagName=tagValue and tagName=~/^张三|王五$/ ) or (tagName=tagValue and tagName=~/^张三|王五$/ )) group by tagName, tagName1 order by time desc limit 1;
图片 图片

执行语句:

select * from mtest where ((companyId='001' and deviceId =~/^001|002$/ ) or (companyId='002' and deviceId =~/^003|002$/ )) group by companyId,deviceId order by time desc limit 1;

示例2:

select *,tagName,tagName1 from measurement_name ((tagName=tagValue and tagName=~/^张三|王五/ ) or (tagName=tagValue and tagName=~/^张三|王五$/ )) group by tagName, tagName1 order by time desc limit 1;
图片

执行语句:

select *, companyId,deviceId from mtest where ((companyId='001' and deviceId =~/^001|002$/ ) or (companyId='002' and deviceId =~/^003|002$/ )) group by companyId,deviceId order by time desc limit 1;

最后有同学说,我要查询的数据,在两个表都有数据,那该怎么办?能联合查询吗?

5.多表查询

图片

执行语句:

select *, companyId,deviceId from mtest,mtest1 where companyId='002' and deviceId =~/^001|002$/ group by deviceId order by time desc limit 1;

最后总结

上面的这些用法,主要解决在循环中查询时序数据库的问题。在循环中查询数据库,是性能大忌,循环10000次,访问数据库10000次,这其中的开销就不多说了。能一个Sql语句就能解决的问题,就一个sql语句解决吧!

当然第四种用法, or 的使用,能 or 多少条件,也是有限制的,如果 or上一百多个条件,又会带来性能问题,查询很慢,具体还是看实际q情况吧。

刻意练习只能入门,持续行动才能精进~!

让我们在实战中越战越勇,越战越强~!

初次使用时序数据库InfluxDB,安装、简单的命令及详解配置

新手上路,时序数据库InfluxDB命令总是报错,这篇文章不容错过!

SpringBoot2.0快速整合InfluxDB,新增、批量新增,通过反射机制构建查询结果,简单易懂,拿来即用

Linux CentOS 7.X 时序数据库InfluxDB的安装及简单使用

欢迎关注同名公众号~!

相关文章

  • 时序数据库 Influxdb 中 in 的替换用法,多表查询

    说到 in 关键字,小伙伴们肯定再熟悉不过了,它可是关系型数据库查询语句中的常用关键字。例: 如果在时序数据库中,...

  • Jmeter+InfluxDB+Grafana实现测试监控

    InfluxDB 一种时序数据库,常用于监控数据统计。时序数据,即按时间维度记录的数据,可高性能地存储、查询时序性...

  • influxDB

    本文介绍了influxDB时序数据库及Go语言操作influxDB。 InfluxDB是一个开源分布式时序、事件和...

  • 一个Go语言的小技巧

    源码来自时序数据库InfluxDB的高可用套件InfluxDB-relay.

  • InfluxDB概念和基本操作

    InfluxDB (时序数据库) 基本概念 InfluxDB(时序数据库),常用的一种使用场景:监控数据统计。每毫...

  • Influxdb in Action

    Influxdb是什么? InfluxDB是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的...

  • SQL语句整理

    显示 创建表和数据库 数据类型 插入行 查询 普通查询 条件查询 排序 限制条数 多表联合查询 更新(替换) 删除...

  • EMQ X 持久化插件系列(二)- InfluxDB 数据存储

    InfluxDB 是一个由 InfluxData 开发的开源时序型数据库。 它由 Go 写成,着力于高性能地查询与...

  • InfluxDB与Grafana相关资料

    时序数据库InfluxDB使用详解 使用Glances、InfluxDB和Grafana监视性能数据 (开源测试工...

  • MySql : 三、 多表查询和事务

    前言 本篇主要介绍了数据库中多表查询以及事务相关的知识。 目录 一、多表查询二、子查询三、事务 一、多表查询 1....

网友评论

      本文标题:时序数据库 Influxdb 中 in 的替换用法,多表查询

      本文链接:https://www.haomeiwen.com/subject/qwjcjrtx.html