Avro Schema:强制将值(map,array)解释为字符串

时间:2017-03-30 09:08:15

标签: json avro apache-nifi

我想通过NiFi将JSON转换为Avro。不幸的是,JSON的复杂类型是我希望看作简单字符串的值!

JSON:

"FLAGS" : {"FLAG" : ["STORED","ACTIVE"]}

我怎样才能告诉AVRO简单地存储" {" FLAG" :[" STORED"," ACTIVE"]}"或" [1,2,3," X"]"作为一个字符串?

真诚地感谢你!

1 个答案:

答案 0 :(得分:3)

在NiFi的ConvertJSONToAvro处理器中执行的JSON到Avro转换并没有在同一步骤中进行转换。基于Avro架构进行转换的能力非常有限,大多数情况下省略了输出中的输入数据字段。但它不会将复杂的结构强制转换为字符串。

相反,您应首先进行JSON-to-JSON转换,然后将汇总的JSON转换为Avro。我认为你要找的是这样的结构:

{
  "FLAGS": "{\"FLAG\":[\"STORED\",\"ACTIVE\"]}"
}

NiFi的JoltTransformJSONExecuteScript处理器非常适合这种情况。如果您的记录足够简单,甚至可能是EvaluateJsonPath $.FLAGSReplaceText { "FLAGS": "${flags:escapeJson()}" }的组合。