我正在尝试从 Avro 和 JSON 中提取属性。我可以使用
EvaluateJsonPath
处理器从 JSON 中提取属性。我正在尝试在 Avro 上做同样的事情,但我不确定它是否可以实现。
这是我的流程,
ExecuteSQL
-> SplitAvro
-> UpdateAttribute
UpdateAttribute
是我想要提取属性的处理器。请查看以下 UpdateAttribute
处理器的快照,
所以,我的基本问题是,我们可以从 Avro 中提取属性吗?如果是,请向我提供正确的方法。或者在提取属性之前是否必须始终使用
ConvertAvroToJSON
?
目前,NiFi 中无法直接从 Avro 中提取属性(还没有像用于 XML 的 XPath 或用于 JSON 的 JsonPath 那样的 AvroPath),因此正如您所说,您可以在提取属性之前使用 ConvertAvroToJSON。
或者,我编写了一个在 ExecuteScript 处理器中使用的 Groovy 脚本,它将“Avro path”值作为动态属性(每个都以 avro.path 开头,其值实际上是 JsonPath),在内存中将 Avro 转换为 JSON,并要求您下载并指向 Avro JAR。如果您有兴趣,我可以将其发布在这里,但实际上它唯一的优点是在 Avro 中维护流文件内容,尽管这可能很烦人,但您可以使用 ConvertAvroToJson -> EvaluateJsonPath -> ConvertJsonToAvro 作为解决方法。