InfluxDB 模糊查询完整总结与示例(修正版)

查询方式全面总结(InfluxQL)

1. 精确匹配(最佳性能)

-- 单值精确匹配
WHERE routername = 'NJ-MAIPU-1' -- 多值精确匹配(使用OR)
WHERE routername = 'NJ-MAIPU-1' OR routername = 'NJ-SCT-R02'

2. 基础模糊匹配(简洁写法)

-- 包含匹配
WHERE routername =~ /MAIPU/
WHERE host =~ /web/ -- 等同于明确写法
WHERE routername =~ /.*MAIPU.*/

3. 标准模式匹配(明确范围)

-- 开头匹配
WHERE routername =~ /^NJ-.*/ -- 结尾匹配
WHERE routername =~ /.*-R01$/ -- 包含匹配(明确写法)
WHERE routername =~ /.*MAIPU.*/

4. 多值组合匹配(高效多选)

-- 多值或匹配
WHERE routername =~ /(MAIPU|SCT|CORE)/ -- 精确多值匹配
WHERE routername =~ /^(NJ-MAIPU-1|NJ-SCT-R02)$/

5. 字符范围匹配

-- 数字匹配
WHERE routername =~ /[0-9]/ -- 字母匹配
WHERE routername =~ /[A-Z]/ -- 组合匹配
WHERE routername =~ /[A-Z][0-9]/ -- 如A1, B2等

重要注意事项

InfluxQL 不支持的特性:

-- 以下语法会报错!
WHERE routername IN ('NJ-MAIPU-1', 'NJ-SCT-R02')
WHERE routername IN ('value1', 'value2')

多OR正则(避免使用):

-- 性能差,避免使用
WHERE routername =~ /MAIPU/ OR routername =~ /SCT/ OR routername =~ /CORE/

各种方式的特性对比

查询方式 语法示例 性能 可读性 适用场景
精确匹配 routername = '值' 已知具体值
多值OR精确 name = 'A' OR name = 'B' 已知多个具体值
基础模糊 name =~ /pattern/ 快速简单匹配
多值组合 name =~ /(pat1|pat2)/ 同类型多值匹配
标准模式 name =~ /.*pattern.*/ 明确范围匹配
多OR正则 =~ /a/ or =~ /b/ 避免使用

应用场景详细示例

场景1:精确设备查询

-- 查询特定设备
SELECT * FROM xr_intf_stats
WHERE routername = 'NJ-MAIPU-1'
ORDER BY time DESC
LIMIT 10 -- 查询多个特定设备
SELECT * FROM xr_intf_stats
WHERE routername = 'NJ-MAIPU-1' OR routername = 'NJ-SCT-R02'
ORDER BY time DESC
LIMIT 10

场景2:设备类型筛选

-- 查询所有MAIPU设备
SELECT * FROM xr_intf_stats
WHERE routername =~ /MAIPU/
ORDER BY time DESC -- 查询多种类型设备
SELECT * FROM xr_intf_stats
WHERE routername =~ /(MAIPU|SCT|CORE)/
ORDER BY time DESC

场景3:设备编号模式匹配

-- 查询所有R系列设备
SELECT * FROM xr_intf_stats
WHERE routername =~ /.*-R[0-9]+$/
ORDER BY time DESC -- 查询NJ开头的所有设备
SELECT * FROM xr_intf_stats
WHERE routername =~ /^NJ-.*/
ORDER BY time DESC

场景4:端口和接口查询

-- 查询Tengigabit接口
SELECT * FROM xr_intf_stats
WHERE name =~ /tengigabit/
ORDER BY time DESC -- 查询特定端口范围
SELECT * FROM xr_intf_stats
WHERE name =~ /0\/0\/[1-4]/
ORDER BY time DESC

️ 性能优化实践

1. 字段类型检查

-- 确认routername是tag字段(有索引)
SHOW TAG KEYS FROM xr_intf_stats -- 如果是field字段,考虑修改数据模型
SHOW FIELD KEYS FROM xr_intf_stats

2. 查询性能层级

-- 1. 最佳:精确匹配
WHERE routername = 'NJ-MAIPU-1' -- 2. 良好:多值OR精确匹配
WHERE routername = 'NJ-MAIPU-1' OR routername = 'NJ-SCT-R02' -- 3. 一般:单正则匹配
WHERE routername =~ /MAIPU/ -- 4. 一般:多值组合正则
WHERE routername =~ /(MAIPU|SCT)/ -- 5. 避免:多OR正则
WHERE routername =~ /MAIPU/ OR routername =~ /SCT/

3. 数据模型优化建议

-- 原始数据
INSERT xr_intf_stats,routername="NJ-MAIPU-1" value=100 -- 优化建议:添加设备类型tag
INSERT xr_intf_stats,
routername="NJ-MAIPU-1",
device_type="MAIPU",
location="NJ"
value=100

实际查询示例

示例1:多设备流量查询

SELECT mean("byte_in") AS avg_in, mean("byte_out") AS avg_out
FROM xr_intf_stats
WHERE time > now() - 1h
AND (routername = 'NJ-MAIPU-1' OR routername = 'NJ-SCT-R02')
GROUP BY time(1m), routername

示例2:设备类型聚合

SELECT mean("byte_in") AS avg_in
FROM xr_intf_stats
WHERE time > now() - 24h
AND routername =~ /(MAIPU|SCT)/
GROUP BY time(1h), routername

示例3:异常端口检测

SELECT *
FROM xr_intf_stats
WHERE time > now() - 30m
AND (err_bitrate > 0 OR byte_in = 0)
AND routername =~ /^NJ-.*/
ORDER BY time DESC

最佳实践总结

  1. 首选精确匹配routername = '具体值'
  2. 多值用OR连接name = 'A' OR name = 'B'
  3. 模糊用单正则name =~ /pattern/
  4. 多模式用组合name =~ /(pat1|pat2)/
  5. 避免多OR正则:性能极差
  6. 确认字段类型:tag字段才有索引
  7. 优化数据模型:添加衍生tag字段

常见错误避免

-- 错误:IN语法不支持
SELECT * FROM xr_intf_stats WHERE routername IN ('A','B') -- 错误:单引号位置
SELECT * FROM xr_intf_stats WHERE routername =~ /'(A|B)'/ -- 正确:多值查询
SELECT * FROM xr_intf_stats
WHERE routername = 'A' OR routername = 'B' -- 正确:正则多值
SELECT * FROM xr_intf_stats
WHERE routername =~ /^(A|B)$/

这个总结基于InfluxQL的实际语法限制,提供了可立即使用的正确查询示例。

Influxdb 得模糊查询总结的更多相关文章

  1. Mybatis框架的模糊查询(多种写法)、删除、添加(四)

    学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 & ...

  2. js—模糊查询

    首先要明白什么是模糊查询(废话又来了),就是根据关键字把列表中符合关键字的一项或某项罗列出来,也就是要检查列表的每一项中是否含有关键字,因此抽象一下就是一个字符串中是否含有某个字符或者字符串. 以下例 ...

  3. mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE

    一.My Batis trim标签有点类似于replace效果. trim 属性, prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条 ...

  4. combobox实现模糊查询自动填充

    利用winform设计软件界面时,经常用到combobox控件,但有时需要绑定数据表中的数据,更进一步,需要实现对数据表中数据的模糊查询功能.本文就讲讲述如何用C#实现combobox下拉列表的模糊查 ...

  5. [转]ORACLE中Like与Instr模糊查询性能大比拼

    instr(title,'手册')>0  相当于  title like '%手册%' instr(title,'手册')=1  相当于  title like '手册%' instr(titl ...

  6. 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

    前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...

  7. StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改

    前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey&qu ...

  8. SQL SERVER 的模糊查询 LIKE

    今天写个动态脚本,需要把数据库里面包含“USER_"的表删除掉,突然想不起来如何搜索通配字符了,赶紧查查MSDN,整理了下模糊查询的知识点,留着以后查阅用. LIKE模糊查询的通配符 通配符 ...

  9. SQL Like模糊查询一些小知识

    模糊查询: where mc like '值':返回值等同于where mc ='值' where mc like '%值':匹配 名称是 '*值'(以“值”作为结尾)的所有数据,*表示任何值任何长度 ...

  10. 10月30日下午 PHP精确查询(模糊查询、模糊+关键字共同查询)

    1.一个条件的模糊查询 <body> <br /> <form action="main.php" method="post"&g ...

随机推荐

  1. Excel:使用powerquery进行多表合并

    ​注:本文原创为:https://www.cnblogs.com/fanyu2019/p/11175827.html,本文在原创的基础上添加修改了一点内容 目录 一. 单工作簿多工作表合并 二. 多工 ...

  2. 从url中获取文件名

    比如 https://abc.com/files/xx.zip,或许xx // 文件名转为小驼峰 export const kebabCase_to_camelCase = (fileName) =& ...

  3. nodejs接收前端传入的文件

    比如前端有一个文件上传的功能 <div> <input type="file"> <button>开始上传</button> < ...

  4. windows使用chrome调试ios webView

    包含safari和App如果安装失败,直接删除C:\Users\Administrator\scoop 重新安装即可 安装scoop windows下的安装源搜索工具,有点类似centos下的yum. ...

  5. MySQL 14 count(*)这么慢,我该怎么办?

    count(*)的实现方式 在不同的MySQL引擎中,count(*)有不同的实现方式: MyISAM引擎把一个表的总行数存在磁盘上,执行count(*)时能直接返回总行数,效率很高: InnoDB引 ...

  6. HyperWorks install

    简介 网格划分软件HyperWorks 的下载链接 https://www.jb51.net/softs/677139.html#downintro2 hyperWorks 的安装链接 http:// ...

  7. SciTech-Mathmatics-ProbabilitiesAndStatistics-Distribution-is-all-you-need: 概率统计到深度学习

    Distribution-is-all-you-need 概率统计到深度学习,四大技术路线图谱,都在这里! https://github.com/graykode/distribution-is-al ...

  8. MSDN 我告诉你官方原版系统下载方法教程

    有很多喜欢MSDN 我告诉你,I Tell You官方原版ISO系统的小伙伴,但是都不太清楚如何才能下载里面的系统,下面msdn123就来分享一下具体的方法教程.方法如下:我们先打开msdn官网:ww ...

  9. 机器学习赋能计算机嗅觉革命:Osmo的气味图谱突破

    气味与代码的双重痴迷 12岁的Alex Wiltschko用零花钱购买了人生第一瓶香水Azzaro pour Homme,由此开启了对气味的终生迷恋.这位现任Osmo CEO的科学家坦言:" ...

  10. King of Karaoke ZOJ - 4025

    https://vjudge.net/problem/ZOJ-4025/origin https://vjudge.net/contest/399385#problem/B It's Karaoke ...