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

如何用Logstash处理MySQL数据,将两个数组合并为对象数组?

Logstash合并数组为指定结构的解决方案

问题背景

数据源是MySQL导出的逗号分隔字符串字段,格式如下:

field01field02
q01, q02, q032, 3, 4
q01, q032, 4
q01, q03, q04, q052, 4, 5, 6

需要通过Logstash过滤器将两个字段拆分后的数组合并为如下结构:

data : [
{ 
    field01 : "q01",
    field02 : "2"
}, 
{ 
    field01 : "q02",
    field02 : "3"
}, 
...
]

解决方案

仅靠mutate插件的add_field无法实现该需求,因为mutate不支持遍历数组元素并构建嵌套结构的操作。需要配合ruby过滤器完成数组的配对与重组:

完整过滤器配置

filter {
    mutate {
        # 用逗号+空格作为分隔符,避免数组元素带前置空格
        split => { "field01" => ", " }
        split => { "field02" => ", " }
    }
    ruby {
        code => '
            # 获取拆分后的两个数组
            field01_array = event.get("field01")
            field02_array = event.get("field02")
            data_array = []
            
            # 取两个数组的最小长度循环,避免数组长度不一致时出错
            [field01_array.length, field02_array.length].min.times do |i|
                # 构建单个键值对哈希
                item = {
                    "field01" => field01_array[i],
                    "field02" => field02_array[i]
                }
                data_array << item
            end
            
            # 将组装好的数组设置到data字段
            event.set("data", data_array)
            
            # 可选:删除原始的field01和field02字段,减少输出冗余
            event.remove("field01")
            event.remove("field02")
        '
    }
}

配置说明

  1. mutate阶段:将field01和field02按, 分割为数组,确保元素没有多余的前置空格。
  2. ruby阶段:
    • 获取拆分后的两个数组引用;
    • 遍历数组索引,将对应位置的元素配对成哈希对象;
    • 将所有哈希对象存入数组,最终设置到data字段;
    • 可选删除原始字段,精简输出内容。

注意事项

如果两个数组的长度不一致,上述代码会以较短的数组长度为准,忽略超出长度的元素。若需要处理长度不一致的场景,可根据需求修改Ruby代码逻辑(比如为缺失元素填充默认值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:06:20