自学内容网 自学内容网

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

    查询语句:

    SELECT * FROM table WHERE field IN ($var)
    

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

    SELECT * FROM table WHERE field IN ('value1', 'value2')
    

    或等价于:

    SELECT * FROM table WHERE field = 'value1' OR field = 'value2'
    

2. iliteral_or

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

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

  • 示例

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

    查询语句:

    SELECT * FROM table WHERE LOWER(field) IN (LOWER($var))
    

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

    SELECT * FROM table WHERE LOWER(field) IN (LOWER('Value1'), LOWER('Value2'))
    

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

    SELECT * FROM table WHERE field ILIKE 'Value1' OR field ILIKE 'Value2'
    

3. not_literal_or

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

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

  • 示例

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

    查询语句:

    SELECT * FROM table WHERE field NOT IN ($var)
    

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

    SELECT * FROM table WHERE field NOT IN ('value1', 'value2')
    

    或等价于:

    SELECT * FROM table WHERE field != 'value1' AND field != 'value2'
    

4. not_iliteral_or

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

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

  • 示例

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

    查询语句:

    SELECT * FROM table WHERE LOWER(field) NOT IN (LOWER($var))
    

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

    SELECT * FROM table WHERE LOWER(field) NOT IN (LOWER('Value1'), LOWER('Value2'))
    

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

    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

  • 查询

    SELECT * FROM users WHERE username = 'Alice' OR username = 'Bob';
    

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

  • 过滤器iliteral_or

  • 查询

    SELECT * FROM logs WHERE level ILIKE 'error' OR level ILIKE 'warning';
    

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

  • 过滤器not_literal_or

  • 查询

    SELECT * FROM products WHERE category != 'Electronics' AND category != 'Furniture';
    

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

  • 过滤器not_iliteral_or

  • 查询

    SELECT * FROM orders WHERE status NOT ILIKE 'completed' AND status NOT ILIKE 'shipped';
    

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


原文地址:https://blog.csdn.net/liu_rockefeller/article/details/145069855

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!