星树字段类型

星树索引预先计算聚合,加速聚合查询的性能。如果星树索引被配置为索引映射的一部分,则在实时摄取数据时创建并维护星树索引。

UDB-SX会自动使用星树索引来优化聚合,如果查询的字段是星树索引维度字段,并且聚合是在星树索引度量字段上执行。无需更改查询语法或请求参数。

更多信息,请参阅星树索引

先决条件

要使用星树索引,请按照启用星树索引中的说明操作。

示例

以下示例展示了如何使用星树索引。

星树索引映射

在mappings的composite部分定义星树索引映射。

以下示例API请求创建了一个名为request_aggs的相应星树索引。为了对request_size和latency字段进行度量聚合,并在port和status字段上进行查询,配置以下映射:

PUT logs
{
  "settings": {
    "index.number_of_shards": 1,
    "index.number_of_replicas": 0,
    "index.composite_index": true,
    "index.append_only.enabled": true
  },
  "mappings": {
    "composite": {
      "request_aggs": {
        "type": "star_tree",
        "config": {
          "max_leaf_docs": 10000,
          "skip_star_node_creation_for_dimensions": [
            "port"
          ],
          "date_dimension" : {
            "name": "@timestamp",
            "calendar_intervals": [
              "month",
              "day"
            ]
          },
          "ordered_dimensions": [
            {
              "name": "status"
            },
            {
              "name": "port"
            },
            {
              "name": "method"
            }
          ],
          "metrics": [
            {
              "name": "request_size",
              "stats": [
                "sum",
                "value_count",
                "min",
                "max"
              ]
            },
            {
              "name": "latency",
              "stats": [
                "sum",
                "value_count",
                "min",
                "max"
              ]
            }
          ]
        }
      }
    },
    "properties": {
      "@timestamp": {
        "format": "strict_date_optional_time||epoch_second",
        "type": "date"
      },
      "status": {
        "type": "integer"
      },
      "port": {
        "type": "integer"
      },
      "request_size": {
        "type": "integer"
      },
      "method" : {
        "type": "keyword"
      },
      "latency": {
        "type": "scaled_float",
        "scaling_factor": 10
      }
    }
  }
}

星树索引配置选项

您可以使用以下 config 选项在 mappings 部分自定义您的星树实现。这些选项在重新索引之前无法修改。

参数 描述
ordered_dimensions 基于星树索引中要聚合的指标的指标字段列表。必需的。
date_dimension 如果提供日期维度,则根据哪些度量将在星树索引中进行聚合,在其后附加ordered_dimensions。可选。
metrics 执行聚合所需的指标字段列表。必需的。
max_leaf_docs 最大数量的星树文档,一个叶子节点可以指向。达到最大文档数后,将根据ordered_dimension(如果有)中下一字段的唯一值创建子节点。默认值为10000。较低的值将使用更多存储,但查询性能更快。相反,较高的值将使用更少的存储,但查询性能较慢。更多信息,请参阅星树索引结构
skip_star_node_creation_for_dimensions 星树索引将跳过创建星节点的维度列表。当true时,这会以查询性能为代价减少存储大小。默认为false。有关星节点的更多信息,请参阅星树索引结构

已排序的维度

ordered_dimensions 参数包含基于哪些指标将在星树索引中聚合的字段。只有当查询中的所有字段都是 ordered_dimensions 的部分时,才会选择星树索引进行查询。

当使用 ordered_dimesions 参数时,请遵循以下最佳实践:

  • 避免使用高基数字段作为维度。高基数字段会对存储空间、索引吞吐量和查询性能产生不利影响。

  • 每个星树索引支持 2 至 10 维度的最小值和最大值。

ordered_dimensions 参数支持以下字段类型:

  • 所有数值字段类型,不包括 unsigned_long 和 scaled_float。

  • keyword

  • object

ordered_dimensions 参数支持以下属性。

参数 必需/可选 描述
name 必需 字段名称。字段名称应作为索引 mapping 的一部分出现在 properties 部分。确保任何相关字段的 doc_values 设置为 enabled。

日期维度

支持一个date_dimension字段,并且始终位于有序维度之上,作为它们通常具有高基数的原因。

可以支持以下三个日历间隔中的最多三个:date_dimension

  • year (of era)

  • quarter (of year)

  • month (of year)

  • week (of week-based year)

  • day (of month)

  • hour (of day)

  • half-hour (of day)

  • quater-hour (of day)

  • minute (of hour)

  • second (of minute)

任何date字段中的值都将根据提供的日历间隔的粒度进行四舍五入。例如:

  • 默认 calendar_intervals 是 minute 和 half-hour。

  • 在查询过程中,会自动选择最近的粒度间隔。例如,如果您已将 hour 和 minute 配置为 calendar_intervals,并且您的查询是按月日期直方图,则将自动选择 hour 间隔,以便以优化的方式计算查询结果。

  • 为了支持基于时区的查询,:30 等于一个 half-hour 间隔,而 :15 等于一个 quarter-hour 间隔。

指标

配置您需要执行聚合的任何指标字段。 Metrics 是星树索引配置的一部分。

当使用metrics时,请遵循以下最佳实践:

  • 当前,由metrics支持的字段都是数值字段类型,除了unsigned_long

  • 支持的度量聚合包括

    • Avg 是基于 Sum 和 Value_count 推导出的度量标准,在查询运行时不会被索引。其余的基本度量标准会被索引。

  • 每个星树索引支持的最大基本指标数量为100。

如果Min、Max、Sum和Value_count被定义为每个字段的metrics,则可以配置多达25个这样的字段,如下例所示:

{
  "metrics": [
    {
      "name": "field1",
      "stats": [
        "sum",
        "value_count",
        "min",
        "max"
      ],
      ...,
      ...,
      "name": "field25",
      "stats": [
        "sum",
        "value_count",
        "min",
        "max"
      ]
    }
  ]
}

属性

metrics参数支持以下属性。

参数 必需/可选 描述
name 必需 字段名称。字段名称应作为索引 mapping 的一部分出现在 properties 部分。确保任何相关字段的 doc_values 设置为 enabled。
stats 可选 每个字段计算的度量聚合列表。您可以在以下选项之间选择:Min, Max, Sum, Avg, and Value Count.
默认为SUM。
这是一个派生度量统计量,如果作为度量的一部分存在,则会自动在查询中受到支持。

支持的查询和聚合

有关支持的查询和聚合的信息,请参阅星树索引的“支持的查询和聚合”