因此我在ApacheNifi中建立了一个工作流,该工作流提取了电子邮件附件并将csv文件转换为json文件。我使用了 InferAvroSchema 到 ConvertRecord 将cv转换为json。一切正常,直到我得到的csv文件没有遵循我编写的avroschema。现在,我需要找到一种在不使用这两个处理器的情况下将csv转换为json的方法,因为csv格式会不时发生变化。我现在正在使用的csv格式将在下面链接。
我尝试了extractText,但是在编写正确的正则表达式以提取与其标头匹配的值时遇到了麻烦。我还尝试了 AttriutesToJson ,但似乎它没有读取所需的属性。我知道我可以指定要拉出的属性,但是由于标头/值会不断变化,因此我似乎找不到动态设置它的方法。Current CSV format
答案 0 :(得分:0)
您是否尝试过使用executeStreamCommand处理器编写脚本?
更具体地说,您是在谈论标题不同吗? ConvertRecord处理器中有一些选项可以包含标题
答案 1 :(得分:0)
如果您使用的是NiFi 1.9.2+,则可以使用CsvReader
,它会根据每个流文件自动推断模式。由于JsonRecordSetWriter
也可以使用嵌入的推断架构来写出JSON,因此您不再需要预先定义显式的Avro架构。
只要单个流程文件中CSV的所有行都遵循相同的架构,您就不会有任何问题。如果您在同一个流文件中可以具有不同的架构(我怀疑这也会导致许多其他问题),则必须首先将它们过滤到单独的流文件中。