Apache Nifi - 从 Avro 提取属性

问题描述 投票:0回答:2

我正在尝试从 Avro 和 JSON 中提取属性。我可以使用

EvaluateJsonPath
处理器从 JSON 中提取属性。我正在尝试在 Avro 上做同样的事情,但我不确定它是否可以实现。

这是我的流程,

ExecuteSQL
->
SplitAvro
->
UpdateAttribute

UpdateAttribute
是我想要提取属性的处理器。请查看以下
UpdateAttribute
处理器的快照,

所以,我的基本问题是,我们可以从 Avro 中提取属性吗?如果是,请向我提供正确的方法。或者在提取属性之前是否必须始终使用

ConvertAvroToJSON

json avro apache-nifi
2个回答
14
投票

目前,NiFi 中无法直接从 Avro 中提取属性(还没有像用于 XML 的 XPath 或用于 JSON 的 JsonPath 那样的 AvroPath),因此正如您所说,您可以在提取属性之前使用 ConvertAvroToJSON。

或者,我编写了一个在 ExecuteScript 处理器中使用的 Groovy 脚本,它将“Avro path”值作为动态属性(每个都以 avro.path 开头,其值实际上是 JsonPath),在内存中将 Avro 转换为 JSON,并要求您下载并指向 Avro JAR。如果您有兴趣,我可以将其发布在这里,但实际上它唯一的优点是在 Avro 中维护流文件内容,尽管这可能很烦人,但您可以使用 ConvertAvroToJson -> EvaluateJsonPath -> ConvertJsonToAvro 作为解决方法。


0
投票
也许使用

PartitionRecord

 而不是 
SplitAvro
UpdateAttribute
 处理器 - 它将根据您提供的属性对记录进行分区,因此不需要显式拆分,或者您可以稍后在流程中进行拆分。

例如,对于OP问题中的设置(

ExecuteSQL

 -> 
SplitAvro
 -> 
UpdateAttribute
):

您可以像这样配置

PartitionRecord

© www.soinside.com 2019 - 2024. All rights reserved.