You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Kibana的Vega中如何合并重叠的起止区间数据?

重叠区间合并Vega原生实现方案

完全基于Vega内置transform实现,无需自定义JavaScript代码,可直接在Kibana Vega环境中运行,实现逻辑如下:

  • 先对原始区间按start字段升序排序,保证所有区间按左端点从小到大排列
  • 通过窗口函数记录上一个区间的右端点,给重叠区间打相同的分组标记
  • 按分组聚合,每组取最小start作为合并后区间的左端点,最大end作为合并后区间的右端点

完整transform配置示例

// 仅展示my_lines数据集的transform部分,其余配置按你原有逻辑保留即可
{
  "name": "my_lines",
  // 你的原始数据来源配置保持不变
  "transform": [
    // 1. 按start升序排序
    {"type": "sort", "by": {"field": "start", "order": "ascending"}},
    // 2. 用窗口函数获取上一个区间的end值
    {
      "type": "window",
      "sort": {"field": "start", "order": "ascending"},
      "ops": ["lag"],
      "fields": ["end"],
      "as": ["last_end"]
    },
    // 3. 标记是否为新分组的起点:当前区间start大于上一个区间end时为新分组
    {
      "type": "formula",
      "expr": "datum.last_end == null || datum.start > datum.last_end ? 1 : 0",
      "as": "is_new_group"
    },
    // 4. 累加生成分组ID,重叠区间会分到同一个ID下
    {
      "type": "window",
      "ops": ["sum"],
      "fields": ["is_new_group"],
      "as": ["group_id"]
    },
    // 5. 按分组聚合得到合并后的区间
    {
      "type": "aggregate",
      "groupby": ["group_id"],
      "fields": ["start", "end"],
      "ops": ["min", "max"],
      "as": ["start", "end"]
    }
  ]
}

执行完上述transform后,my_lines数据集输出结果和你要求的预期结果完全一致。

内容的提问来源于stack exchange,提问作者pouyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:39:02