我有一个用例,其中String字段有时包含一个值,有时包含多个值。这会在下游引起问题,因为我们的Avro模式在该字段上指定了类型“ Array”,但有时会收到“ String”类型。
我没有办法更改下游逻辑,并且我想避免将Arrays转换为串联字符串作为解决方法。有没有一种方法可以在Logstash中创建单项数组?
研究
Logstash中有一个转换过滤器,但是它没有明确允许转换为字符串数组,并且以下操作不起作用:
mutate {
convert => {"FieldName" => "[string]"}
}
我也尝试过明确地将字段重新创建为没有运气的数组。
mutate {
add_field => { "[FieldName_temp]" => "%{FieldName}" }
remove_field => { "FieldName" }
}
mutate {
rename => { "[FieldName_temp]" => "[FieldName]" }
}
我甚至在Logstash中尝试过什么吗?
通用过滤器选项add_field可以将字符串转换为数组(如果该字段已经存在),或者将条目追加到数组,然后可以删除数组中的最后一个条目。
mutate { add_field => { "foo" => 2 } }
mutate { remove_field => [ "[foo][-1]" ] }
您也可以使用红宝石滤镜来做到这一点,但是我认为这很难理解:
ruby { code => 'event.set("foo", [ event.get("foo") ].flatten)' }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句