【问题标题】:Nifi: Flow content (dynamic json format) to csvNifi:流内容(动态json格式)到csv
【发布时间】:2018-09-26 20:20:43
【问题描述】:

我有案例:流中的内容是总是 json 格式json 中的数据总是在变化(kyes 和 values)。是否可以将此流内容转换为 csv

请注意,json 中的键总是在变化的。

非常感谢,

【问题讨论】:

标签: json apache csv apache-nifi apache-minifi


【解决方案1】:

要实现这个用例,我们需要首先为每个 json 记录动态生成 avro 模式,然后转换为 AVRO 最后转换 AVRO转为 CSV

流程:

1.SplitJson //split the array of json records into individual records

2.InferAvroSchema //infer the avro schema based on Json record and store in attribute

3.ConvertJSONToAvro //convert each json record into Avro data file

4.ConvertRecord //read the avro data file dynamically and convert into CSV format

5.MergeContent (or) MergeRecord processor //to merge the splitted flowfiles into one flowfile based on defragment strategy.

保存this xml 并上传到您的 nifi 实例并根据您的要求进行更改。

【讨论】:

  • 非常感谢您的建议,这非常有用:)。在这种情况下,我的 json 数组为: [{"a":"IboECKV", "b":"2018-09-14 21:05:02.000Z", "c":"2132a4"}, {"a ":"IboECKV", "b_a2":"2018-09-14 21:05:02.000Z_b2", "c":"2132a4_c2"}] 每条记录的键名相同,有没有办法将它们转换为 AVRO没有拆分 json?????
  • @ThuyLe,这是不可能的,因为您有 两个 json 记录的不同键(b,b_a2)InferAvroSchema 处理器仅适用于 一次记录一个。因此,要转换为 CSV 格式,您必须拆分 json,然后为 每条记录 动态生成架构,然后动态转换为 CSV 格式。
  • 嗨@shu,抱歉正确的数据是 [{"a":"IboECKV", "b":"2018-09-14 21:05:02.000Z", "c":" 2132a4"}, {"a":"IboECKV_a2", "b":"2018-09-14 21:05:02.000Z", "c":"2132a4_c2"}]
  • 嗨@Shu,在某些情况下,我们有 100M 行的 json 数组,我们拆分 json 将其转换为 avro 然后再次合并,这需要时间,我知道 InferAvroSchema 处理器仅适用于一条记录一次,Nifi 是否有其他处理器可以做到这一点?
  • @ThuyLe,NiFi 支持动态读取 CSV,Avro 格式的模式。但是对于 Json 格式,这还不能在 json 记录数组 上动态读取。所以这就是为什么需要拆分 json 并转换为 Avro 的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多