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

如何使用jq在Firehose聚合事件中提取元数据并实现动态分区?

Firehose聚合事件拆分问题及解决

问题情况

我在Firehose中处理聚合事件时,用以下jq查询提取键值对时触发错误:

id:.id
users:users[].uuid

错误提示:

Error: metadata extraction failed because JQ query failed. invalid jq query causing a single record to split into 2 or more.

输入的聚合事件数据(注:原始JSON存在语法错误,键值对间缺少逗号,需修正后才能正常解析):

{   "id":20
    "users": [
        {   "uuid":2330
            "first": "Stevie",
            "last": "Wonder"
        },
        {   "uuid":9033131
            "first": "Michael",
            "last": "Jackson"
        }
    ]
}
{   "id":30
    "users": [
        {   "uuid":984209302
            "first": "lower",
            "last": "harvest"
        },
        {   "uuid":8980323932
            "first": "Duncan",
            "last": "mighty"
        }
    ]
}

期望输出是按uuid拆分每个用户为独立记录,格式如下:

{
    "id":20,
    "users": [
        {
            "uuid":2330,
            "first": "Stevie",
            "last": "Wonder"
        }
    ]
},
{
    "id":20,
    "users": [
        {
            "uuid":9033131,
            "first": "Michael",
            "last": "Jackson"
        }
    ]
},
{
    "id":30,
    "users": [
        {
            "uuid":984209302,
            "first": "lower",
            "last": "harvest"
        }
    ]
}

解决方法

错误原因

你用的查询里users[].uuid会把每个用户的uuid单独输出,导致单条输入记录被拆分成多条,违反了Firehose的处理规则,所以报错。要实现按uuid拆分,得保留每个用户的完整信息,同时为每个用户生成带原id的独立记录。

正确jq语句

. as $parent | .users[] | {id: $parent.id, users: [.]}

语句说明

  1. . as $parent:把当前整个输入对象(包含id和users数组)存到变量$parent,后续用来引用原记录的id。
  2. .users[]:遍历users数组里的每一个用户对象。
  3. {id: $parent.id, users: [.]}:为每个用户生成新记录,id沿用原记录的id,users字段是只包含当前用户的数组,完全匹配你要的输出格式。

额外提示

先修正输入JSON的语法错误,确保键值对之间都有逗号,否则jq无法正常解析数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:22:20