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';

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

相关推荐
eli96039 分钟前
node-ddk, electron组件,基础运行环境配置
前端·javascript·electron
weixin4562271940 分钟前
使用electron-vite创建桌面应用
前端·javascript·electron
一 乐2 小时前
订票系统|基于Java+vue的火车票订票系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计·论文·订票系统
失业写写八股文3 小时前
Java性能调优三板斧:CPU与Full GC问题定位的解决方案
java·性能优化
GISer_Jing3 小时前
计算机网络—跨域&解决方法
前端·javascript·计算机网络
翱翔-蓝天4 小时前
Vue 3 组件高级语法
前端
倒霉男孩4 小时前
HTML元素
前端·html
银迢迢4 小时前
javaweb自用笔记:Mybatis
java·开发语言·笔记
Bigger4 小时前
useEffect 的核心使用技巧与避坑指南
前端·javascript·react.js
就改了5 小时前
SpringMVC——数据传递的多种方式
java·开发语言