Apache NiFi中使用Jolt Transform拆分记录求助
用Jolt Transform实现数组按索引拆分生成多条记录
输入数据
{"resourceid": "d6315d4d7f0c","timestamp": [166406,166404,166504],"Key": ["mem","net","diskspace"],"data": [89,90,91]}
期望输出
[{"resourceid": "d6315d4d7f0c","timestamp": 166406,"Key": "mem","data": 89},{"resourceid": "d6315d4d7f0c","timestamp": 166404,"Key": "net","data": 90},{"resourceid": "d6315d4d7f0c","timestamp": 166504,"Key": "diskspace","data": 91}]
Jolt Transform Spec
通过shift和cardinality组合操作实现需求,具体配置如下:
[ { "operation": "shift", "spec": { "timestamp": { "*": { "@(2,resourceid)": "[&1].resourceid", "@": "[&1].timestamp", "@(2,Key[&1])": "[&1].Key", "@(2,data[&1])": "[&1].data" } } } }, { "operation": "cardinality", "spec": { "*": { "resourceid": "ONE", "timestamp": "ONE", "Key": "ONE", "data": "ONE" } } } ]
逻辑说明
- shift操作:遍历
timestamp数组的每个元素(*匹配数组索引),通过@(2,resourceid)向上两层获取根节点的resourceid值,映射到对应索引的对象中;@直接取当前timestamp元素值;@(2,Key[&1])和@(2,data[&1])分别提取同索引的Key、data数组元素,对应到每个对象的字段。 - cardinality操作:强制每个字段为单值类型,避免shift操作生成数组形式的字段值,保证输出结构符合预期。
内容的提问来源于stack exchange,提问作者Sathish
相关产品推荐
相关产品推荐

