Grafana 过滤器介绍(literal_or、iliteral_or、not_literal_or、not_literal_or)

Grafana 中的变量(Variables)在创建和使用时,可以通过 高级选项(Advanced options) 来设置变量的 多值数据过滤器(Multi-value variable filtering options),这些选项决定了当变量包含多个值时,在查询中如何插入和处理这些值。其中,常见的过滤器选项包括:

  1. literal_or
  2. iliteral_or
  3. not_literal_or
  4. not_iliteral_or

以下是这些选项的详细区别和使用方式:


1. literal_or

  • 含义 :进行 区分大小写精确匹配 ,使用 OR 运算符连接。

  • 用途 :当变量包含多个值时,使用 OR 将多个值连接起来,查询包含任意一个指定值的数据。

  • 示例

    假设变量 $var 具有值:value1, value2

    查询语句:

    sql 复制代码
    SELECT * FROM table WHERE field IN ($var)

    使用 literal_or 过滤器,变量会被替换为:

    sql 复制代码
    SELECT * FROM table WHERE field IN ('value1', 'value2')

    或等价于:

    sql 复制代码
    SELECT * FROM table WHERE field = 'value1' OR field = 'value2'

2. iliteral_or

  • 含义 :进行 不区分大小写精确匹配 ,使用 OR 运算符连接。

  • 用途 :当变量包含多个值时,使用 OR 将多个值连接起来,查询包含任意一个指定值的数据,匹配时不区分大小写。

  • 示例

    假设变量 $var 具有值:Value1, Value2

    查询语句:

    sql 复制代码
    SELECT * FROM table WHERE LOWER(field) IN (LOWER($var))

    使用 iliteral_or 过滤器,变量会被替换为:

    sql 复制代码
    SELECT * FROM table WHERE LOWER(field) IN (LOWER('Value1'), LOWER('Value2'))

    或者在支持不区分大小写匹配的数据库中,可以使用:

    sql 复制代码
    SELECT * FROM table WHERE field ILIKE 'Value1' OR field ILIKE 'Value2'

3. not_literal_or

  • 含义 :进行 区分大小写精确不匹配 ,使用 AND 运算符连接。

  • 用途 :当变量包含多个值时,使用 AND 将多个 不等于 条件连接起来,排除指定的值。

  • 示例

    假设变量 $var 具有值:value1, value2

    查询语句:

    sql 复制代码
    SELECT * FROM table WHERE field NOT IN ($var)

    使用 not_literal_or 过滤器,变量会被替换为:

    sql 复制代码
    SELECT * FROM table WHERE field NOT IN ('value1', 'value2')

    或等价于:

    sql 复制代码
    SELECT * FROM table WHERE field != 'value1' AND field != 'value2'

4. not_iliteral_or

  • 含义 :进行 不区分大小写精确不匹配 ,使用 AND 运算符连接。

  • 用途 :当变量包含多个值时,使用 AND 将多个 不等于 条件连接起来,排除指定的值,匹配时不区分大小写。

  • 示例

    假设变量 $var 具有值:Value1, Value2

    查询语句:

    sql 复制代码
    SELECT * FROM table WHERE LOWER(field) NOT IN (LOWER($var))

    使用 not_iliteral_or 过滤器,变量会被替换为:

    sql 复制代码
    SELECT * FROM table WHERE LOWER(field) NOT IN (LOWER('Value1'), LOWER('Value2'))

    或者在支持不区分大小写匹配的数据库中,可以使用:

    sql 复制代码
    SELECT * FROM table WHERE field NOT ILIKE 'Value1' AND field NOT ILIKE 'Value2'

总结

  • literal_or :区分大小写的 OR 精确匹配。用于查询字段等于指定值的数据。
  • iliteral_or :不区分大小写的 OR 精确匹配。用于查询字段等于指定值(忽略大小写)的数据。
  • not_literal_or :区分大小写的 AND 精确不匹配。用于排除字段等于指定值的数据。
  • not_iliteral_or :不区分大小写的 AND 精确不匹配。用于排除字段等于指定值(忽略大小写)的数据。

应用场景

  • literal_or:当您希望查询结果包含某字段等于多个特定值时,且需要区分大小写。
  • iliteral_or:当您希望查询结果包含某字段等于多个特定值时,且不区分大小写。
  • not_literal_or:当您希望查询结果排除某字段等于多个特定值时,且需要区分大小写。
  • not_iliteral_or:当您希望查询结果排除某字段等于多个特定值时,且不区分大小写。

注意事项

  • 支持性 :并非所有数据源都支持不区分大小写的匹配(如 ILIKE 运算符)。在使用 iliteral_ornot_iliteral_or 时,请确保您的数据源支持相应的功能。
  • 性能影响:使用不区分大小写的匹配或否定匹配可能会对查询性能产生影响,具体影响程度取决于数据源和数据量。
  • 变量值格式:确保变量值与查询字段的数据类型和格式匹配,例如字符串需要加引号,数值类型不需要。

示例应用

场景1 :查询用户表中用户名为 AliceBob 的记录,区分大小写。

  • 过滤器literal_or

  • 查询

    sql 复制代码
    SELECT * FROM users WHERE username = 'Alice' OR username = 'Bob';

场景2 :查询日志表中级别为 errorwarning 的记录,不区分大小写。

  • 过滤器iliteral_or

  • 查询

    sql 复制代码
    SELECT * FROM logs WHERE level ILIKE 'error' OR level ILIKE 'warning';

场景3 :查询商品表中排除类别为 ElectronicsFurniture 的商品,区分大小写。

  • 过滤器not_literal_or

  • 查询

    sql 复制代码
    SELECT * FROM products WHERE category != 'Electronics' AND category != 'Furniture';

场景4 :查询订单表中排除状态为 completedshipped 的订单,不区分大小写。

  • 过滤器not_iliteral_or

  • 查询

    sql 复制代码
    SELECT * FROM orders WHERE status NOT ILIKE 'completed' AND status NOT ILIKE 'shipped';

通过上述解释,您可以根据具体需求选择合适的过滤器选项,以准确控制变量在查询中的替换方式和匹配逻辑。选择正确的过滤器有助于构建高效、准确的查询。

相关推荐
115432031q9 分钟前
基于SpringBoot养老院平台系统功能实现十七
java·前端·后端
众智创新团队17 分钟前
Android的Activity生命周期知识点总结,详情
android·java·开发语言
&岁月不待人&22 分钟前
Android 常用设计模式和实例
java·开发语言·设计模式
qq_139484288231 分钟前
springboot239-springboot在线医疗问答平台(源码+论文+PPT+部署讲解等)
java·数据库·spring boot·后端·spring·maven·intellij-idea
蔚一31 分钟前
微服务SpringCloud Alibaba组件nacos教程【详解naocs基础使用、服务中心配置、集群配置,附有案例+示例代码】
java·后端·spring cloud·微服务·架构·intellij-idea·springboot
神仙别闹35 分钟前
基于Springmvc+MyBatis+Spring+Bootstrap+EasyUI+Mysql的个人博客系统
java·mysql·ssm
计算机小白一个38 分钟前
蓝桥杯 Java B 组之函数定义与递归入门
java·算法·职场和发展·蓝桥杯
浪浪山小白兔1 小时前
CSS 渐变效果详解——线性渐变与径向渐变
前端·css
VillanelleS1 小时前
React进阶之React状态管理&CRA
前端·javascript·react.js
一路向前的月光1 小时前
React(5)
前端·react.js·前端框架