当前位置: 首页 > news >正文

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() - 1hAND (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() - 24hAND routername =~ /(MAIPU|SCT)/
GROUP BY time(1h), routername

示例3:异常端口检测

SELECT *
FROM xr_intf_stats
WHERE time > now() - 30mAND (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的实际语法限制,提供了可立即使用的正确查询示例。

http://www.hskmm.com/?act=detail&tid=12608

相关文章:

  • 多表关系和多表查询
  • 6
  • 【反比例函数】【做题笔记】【图形存在性】题目合集
  • 20250920 嘉定江桥---江苏吴江区太湖 往返160KM骑行小记
  • 工作队列(Work Queues)与消息确认(Ack)
  • React18新增的hook useId
  • 十年架构演进史:从臃肿war包到云原生,我们终于解放了!
  • week1作业
  • 6-5 汇聚层
  • 从IpadOS 26 Beta版切换成IpadOS 26 正式版
  • 2025.9.21总结
  • 6-4 多输入多输出通道
  • 6-6 卷积神经网络LeNet
  • 5-5读写文件
  • 6-2图像卷积
  • 二叉树的高度和判断平衡二叉树
  • 20250921 之所思 - 人生如梦
  • UE5 Cook数据结构
  • 通过微信对客服系统客户进行消息提醒,比如客户快过期了,访客发来的消息也是通过模板消息通知给客服
  • WPF治具软件模板分享 - Dragonet
  • 时间复杂度
  • 基于WOA鲸鱼优化的XGBoost序列预测算法matlab仿真
  • 软件工程第二次作业——个人项目
  • 微信扫码二维码,关注绑定公众号提醒,利用微信公众号的模板消息进行消息通知的推送
  • Arch下实现人脸识别登录:howdy的配置与使用
  • Salephpscripts Web_Directory_Free SQL注入漏洞利用分析(CVE-2024-3552)
  • 12306高并发架构设计:基于区间计数器的网关层拒单方案
  • 各位同学,大家好!我想请大家回忆一段我们在刘集中学的故事,和我单独联系。我想把这些故事写出来保存。欢迎与我分享!谢谢!
  • 实用指南:centos sshd:xxx.xxx.xxx.xxx:allow 如何设置
  • vite7-vue3-os网页os管理|vue3+vite7+arco.design网页pc版webos系统