json - Apache Nifi - 从 Avro 中提取属性

标签 json avro apache-nifi

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

这是我的流程,ExecuteSQL -> SplitAvro -> UpdateAttributeUpdateAttribute是我想提取属性的处理器。请在下面找到 UpdateAttribute 的快照处理器,

UpdateAttribute Processor COnfiguration

所以,我的基本问题是,我们可以从 Avro 中提取属性吗?如果是,请为我提供正确的方法。还是必须使用ConvertAvroToJSON总是在提取属性之前?

最佳答案

目前,there is no way in NiFi to extract attributes directly from Avro (有 not yet an AvroPath 就像 XML 的 XPath 或 JSON 的 JsonPath)所以正如您所说,您可以在提取属性之前使用 ConvertAvroToJSON。

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

关于json - Apache Nifi - 从 Avro 中提取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42496657/

相关文章:

jquery - 如何在不将 &quot 转换为 "的情况下获取元素的内容?

javascript - 无标题 Javascript JSON 数组 -> CSV 导出

serialization - Avro 替代 Writables

cassandra - Apache Nifi/Cassandra - 如何将 CSV 加载到 Cassandra 表中

groovy - ExecuteScript 中的 log.info

java - 使用 Jackson 将 Instant 序列化为 ISO8601 时强制毫秒数

python - Python 中的 JSON.loads() ValueError 额外数据

hadoop - 在 pig 中读取二进制 avro

java - Hadoop:查询/读取 Avro 文件

apache-spark - 无法转换 Parquet 列 : Expected decimal, 找到二进制