首页 > 解决方案 > 如何在德鲁伊查询中同时添加“和”和“或”过滤器?

问题描述

我正在尝试编写一个德鲁伊查询(json文件),它同时是“和”和“或”过滤器。我试过这个:

{
  "queryType": "select",
  "dataSource": "timeseries_db",
  "intervals": ["2020-09-08T17:00:00\/2020-09-08T17:30:00"],
  "pagingSpec":{ "threshold":100},
  "filter": {
    "type": "and",
    "fields": [
      {
        "type": "selector",
        "dimension": "orgid",
        "value": "864e1875-ea80-455b-a835-f75bed0df2a7"
      },
      "filter": {
        "type": "or",
        "fields": [
         {
           "type": "selector",
           "dimension": "host_name",
           "value": "testname.82fae43ca"
         },
         {
           "type": "selector",
           "dimension": "host_name",
           "value": "testname.09db12d4a"
         }
        ]
      }
    ]
  },
  "granularity": "all"
}

我想获取 org id 为 864e1875-ea80-455b-a835-f75bed0df2a7 且主机名为 testname.82fae43ca 或 testname.09db12d4a 的记录

当我运行此查询时,它会抛出错误,提示缺少“类型”。但我已经包括了“类型”。任何帮助表示赞赏。

标签: druid

解决方案


您不需要过滤器"filter"内的额外内容。and试试这个:

{
  "queryType": "select",
  "dataSource": "timeseries_db",
  "intervals": ["2020-09-08T17:00:00\/2020-09-08T17:30:00"],
  "pagingSpec":{ "threshold":100},
  "filter": {
    "type": "and",
    "fields": [
      {
        "type": "selector",
        "dimension": "orgid",
        "value": "864e1875-ea80-455b-a835-f75bed0df2a7"
      },
      {
        "type": "or",
        "fields": [
         {
           "type": "selector",
           "dimension": "host_name",
           "value": "testname.82fae43ca"
         },
         {
           "type": "selector",
           "dimension": "host_name",
           "value": "testname.09db12d4a"
         }
        ]
      }
    ]
  },
  "granularity": "all"
}

另一种方法是在 : 中使用一个in过滤器而不是两个selector过滤器or

{
  "queryType": "select",
  "dataSource": "timeseries_db",
  "intervals": ["2020-09-08T17:00:00\/2020-09-08T17:30:00"],
  "pagingSpec":{ "threshold":100},
  "filter": {
    "type": "and",
    "fields": [
      {
        "type": "selector",
        "dimension": "orgid",
        "value": "864e1875-ea80-455b-a835-f75bed0df2a7"
      },
      {
        "type": "in",
        "dimension": "host_name",
        "values": ["testname.82fae43ca", "testname.09db12d4a"]
      }
    ]
  },
  "granularity": "all"
}

推荐阅读