Influxdb 得模糊查询总结
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
最佳实践总结
- 首选精确匹配:
routername = '具体值'
- 多值用OR连接:
name = 'A' OR name = 'B'
- 模糊用单正则:
name =~ /pattern/
- 多模式用组合:
name =~ /(pat1|pat2)/
- 避免多OR正则:性能极差
- 确认字段类型:tag字段才有索引
- 优化数据模型:添加衍生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 得模糊查询总结的更多相关文章
- Mybatis框架的模糊查询(多种写法)、删除、添加(四)
学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 & ...
- js—模糊查询
首先要明白什么是模糊查询(废话又来了),就是根据关键字把列表中符合关键字的一项或某项罗列出来,也就是要检查列表的每一项中是否含有关键字,因此抽象一下就是一个字符串中是否含有某个字符或者字符串. 以下例 ...
- mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE
一.My Batis trim标签有点类似于replace效果. trim 属性, prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条 ...
- combobox实现模糊查询自动填充
利用winform设计软件界面时,经常用到combobox控件,但有时需要绑定数据表中的数据,更进一步,需要实现对数据表中数据的模糊查询功能.本文就讲讲述如何用C#实现combobox下拉列表的模糊查 ...
- [转]ORACLE中Like与Instr模糊查询性能大比拼
instr(title,'手册')>0 相当于 title like '%手册%' instr(title,'手册')=1 相当于 title like '手册%' instr(titl ...
- 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...
- StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey&qu ...
- SQL SERVER 的模糊查询 LIKE
今天写个动态脚本,需要把数据库里面包含“USER_"的表删除掉,突然想不起来如何搜索通配字符了,赶紧查查MSDN,整理了下模糊查询的知识点,留着以后查阅用. LIKE模糊查询的通配符 通配符 ...
- SQL Like模糊查询一些小知识
模糊查询: where mc like '值':返回值等同于where mc ='值' where mc like '%值':匹配 名称是 '*值'(以“值”作为结尾)的所有数据,*表示任何值任何长度 ...
- 10月30日下午 PHP精确查询(模糊查询、模糊+关键字共同查询)
1.一个条件的模糊查询 <body> <br /> <form action="main.php" method="post"&g ...
随机推荐
- Excel:使用powerquery进行多表合并
注:本文原创为:https://www.cnblogs.com/fanyu2019/p/11175827.html,本文在原创的基础上添加修改了一点内容 目录 一. 单工作簿多工作表合并 二. 多工 ...
- 从url中获取文件名
比如 https://abc.com/files/xx.zip,或许xx // 文件名转为小驼峰 export const kebabCase_to_camelCase = (fileName) =& ...
- nodejs接收前端传入的文件
比如前端有一个文件上传的功能 <div> <input type="file"> <button>开始上传</button> < ...
- windows使用chrome调试ios webView
包含safari和App如果安装失败,直接删除C:\Users\Administrator\scoop 重新安装即可 安装scoop windows下的安装源搜索工具,有点类似centos下的yum. ...
- MySQL 14 count(*)这么慢,我该怎么办?
count(*)的实现方式 在不同的MySQL引擎中,count(*)有不同的实现方式: MyISAM引擎把一个表的总行数存在磁盘上,执行count(*)时能直接返回总行数,效率很高: InnoDB引 ...
- HyperWorks install
简介 网格划分软件HyperWorks 的下载链接 https://www.jb51.net/softs/677139.html#downintro2 hyperWorks 的安装链接 http:// ...
- SciTech-Mathmatics-ProbabilitiesAndStatistics-Distribution-is-all-you-need: 概率统计到深度学习
Distribution-is-all-you-need 概率统计到深度学习,四大技术路线图谱,都在这里! https://github.com/graykode/distribution-is-al ...
- MSDN 我告诉你官方原版系统下载方法教程
有很多喜欢MSDN 我告诉你,I Tell You官方原版ISO系统的小伙伴,但是都不太清楚如何才能下载里面的系统,下面msdn123就来分享一下具体的方法教程.方法如下:我们先打开msdn官网:ww ...
- 机器学习赋能计算机嗅觉革命:Osmo的气味图谱突破
气味与代码的双重痴迷 12岁的Alex Wiltschko用零花钱购买了人生第一瓶香水Azzaro pour Homme,由此开启了对气味的终生迷恋.这位现任Osmo CEO的科学家坦言:" ...
- King of Karaoke ZOJ - 4025
https://vjudge.net/problem/ZOJ-4025/origin https://vjudge.net/contest/399385#problem/B It's Karaoke ...