星树字段类型
星树索引预先计算聚合,加速聚合查询的性能。如果星树索引被配置为索引映射的一部分,则在实时摄取数据时创建并维护星树索引。
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。 这是一个派生度量统计量,如果作为度量的一部分存在,则会自动在查询中受到支持。 |
支持的查询和聚合
有关支持的查询和聚合的信息,请参阅星树索引的“支持的查询和聚合”。