TreeviewCopyright © aleen42 all right reserved, powered by aleen42

Search查询

[!WARNING] Apache Druid支持两种查询语言: Druid SQL原生查询。该文档描述了仅仅在原生查询中的一种查询方式。

搜索查询返回与搜索规范匹配的维度值。

{
  "queryType": "search",
  "dataSource": "sample_datasource",
  "granularity": "day",
  "searchDimensions": [
    "dim1",
    "dim2"
  ],
  "query": {
    "type": "insensitive_contains",
    "value": "Ke"
  },
  "sort" : {
    "type": "lexicographic"
  },
  "intervals": [
    "2013-01-01T00:00:00.000/2013-01-03T00:00:00.000"
  ]
}

对于一个搜索查询,有以下几个主要部分:

属性 描述 是否必须
queryType 该字符串始终为"search", Druid根据该字段来确定如何执行该查询
dataSource 要查询的数据源, 类似于关系型数据库的表。 可以通过 数据源 来查看更多信息
granularity 定义查询粒度,参见 Granularities
filter 参考 Filters
limit 定义搜索结果的每个Historical进程返回最大多少行。 否(默认为1000)
intervals 表示ISO-8601间隔的JSON对象。这定义了运行查询的时间范围。
searchDimensions 运行搜索的维度列,没有设置该字段则意味着在所有的列中搜索
query 参见 Search查询说明
sort 标识搜索结果集如何排序的对象, 可能的类型有 lexicographic , alphanumeric , strlen , numeric。 详情参见 字符串比较部分
context 参见 查询上下文

结果格式如下:

[
  {
    "timestamp": "2013-01-01T00:00:00.000Z",
    "result": [
      {
        "dimension": "dim1",
        "value": "Ke$ha",
        "count": 3
      },
      {
        "dimension": "dim2",
        "value": "Ke$haForPresident",
        "count": 1
      }
    ]
  },
  {
    "timestamp": "2013-01-02T00:00:00.000Z",
    "result": [
      {
        "dimension": "dim1",
        "value": "SomethingThatContainsKe",
        "count": 1
      },
      {
        "dimension": "dim2",
        "value": "SomethingElseThatContainsKe",
        "count": 2
      }
    ]
  }
]

搜索查询的详细实现策略

搜索查询可以使用两种策略来进行执行,默认策略由Broker的运行时配置 druid.query.search.searchStrategy 来决定,该值可以被查询上下文中的 searchStrategy值覆盖。 如果查询上下文和运行时配置都有指定,默认使用 useIndexes策略。

  • 默认的"useIndexes"策略首先根据对位图索引的支持将搜索维度分为两组。然后,它分别对支持位图的维组和其他维组应用index-onlycursor-based的执行计划。index-only仅使用索引进行搜索查询处理。对于每个维度,它读取每个维度值的位图索引,计算搜索,最后检查时间间隔和筛选器。对于cursor-based的执行计划,请参考"cursorOnly"策略。对于基数较大(大多数搜索维度的值都是唯一的)的搜索维度, index-only的性能较低。
  • "cursorOnly"策略生成一个基于cursor的执行计划。这个计划创建一个游标,从QueryableIndexSegment中读取一行,然后计算搜索。如果某些过滤器支持位图索引,则光标只能读取满足这些过滤器的行,从而节省I/O成本。然而,对于低选择性的过滤器,它可能是缓慢的。
  • "auto"策略使用基于成本的计划来选择最佳搜索策略。它估计了基于索引和游标的执行计划的成本,并选择了最优的执行计划。目前,由于成本估算的开销,默认情况下不启用。

服务端配置

下列属性将在运行时生效:

属性 描述 是否必须
druid.query.search.searchStrategy 默认的搜索查询策略 useIndexes

查询上下文

下列属性将在查询时生效:

属性 描述
searchStrategy 覆盖本次查询中 druid.query.search.searchStrategy 的值

Search查询说明

insensitive_contains

如果维度值的任何部分包含此搜索查询规范中指定的值(无论大小写),则会出现"匹配"。语法是:

{
  "type"  : "insensitive_contains",
  "value" : "some_value"
}

fragment

如果维度值的任何部分包含此搜索查询规范中指定的所有值(默认情况下不区分大小写),则会出现"匹配"。语法是:

{
  "type" : "fragment",
  "case_sensitive" : false,
  "values" : ["fragment1", "fragment2"]
}

contains

如果维度值的任何部分包含此搜索查询规范中指定的值,则会出现“匹配”。语法是:

{
  "type"  : "contains",
  "case_sensitive" : true,
  "value" : "some_value"
}

regex

如果维度值的任何部分包含此搜索查询规范中指定的模式,则会出现"匹配"。语法是:

{
  "type"  : "regex",
  "pattern" : "some_pattern"
}

渝ICP备16001958号 | Copyright © 2020 apache-druid.cn All right reserved,powered by Gitbook最近一次修改时间: 2021-11-17 15:22:04

results matching ""

    No results matching ""