Apache nifi 如何在ApacheNIFI中重新排序CSV列

Apache nifi 如何在ApacheNIFI中重新排序CSV列,apache-nifi,apache-nifi-registry,Apache Nifi,Apache Nifi Registry,在ApacheNIFI中对csv中的列重新排序 输入-我有多个具有相同列但顺序不同的文件 输出-刮取一些列并以相同的顺序存储。您应该能够使用ConvertRecord执行此操作,您将使CSVRecordReader的架构按照输入的顺序与列匹配,CSVRecordSetWriter的输出架构按照所需的输出顺序与所选列匹配。我没有尝试过,但我相信这就是它的工作原理。在我的例子中,因为我确信这些列将包含在所有CSV文件中,我只需要对它们重新排序。因此,我使用QueryRecord对csv文件进行重新排

在ApacheNIFI中对csv中的列重新排序

输入-我有多个具有相同列但顺序不同的文件


输出-刮取一些列并以相同的顺序存储。

您应该能够使用ConvertRecord执行此操作,您将使CSVRecordReader的架构按照输入的顺序与列匹配,CSVRecordSetWriter的输出架构按照所需的输出顺序与所选列匹配。我没有尝试过,但我相信这就是它的工作原理。

在我的例子中,因为我确信这些列将包含在所有CSV文件中,我只需要对它们重新排序。因此,我使用QueryRecord对csv文件进行重新排序

例如,以下是我的csv文件:

\\file1
name, age, location, gender
Jack, 40, TW, M
Lisa, 30, CA, F 

\\file2
name, location, gender, age
Mary, JP, F, 25
Kate, DE, F, 23
我想将列重新排序为location、name、gender、age,我在QueryRecord中设置了一个名为reorder_data的新属性,其值如下:

从FLOWFILE中选择位置、姓名、性别、年龄

然后,流文件中的数据将变为:

\\file1 - reordered
location, name, gender, age
TW, Jack, M, 40
CA, Lisa, F, 30

\\file2 - reordered
location, name, gender, age
JP, Mary, F, 25
DE, Kate, F, 23
因此,我可以从QueryRecord获得重新排序的数据输出以及原始数据,这非常方便

顺便说一句,您还可以使用组变量或属性设置列顺序,以便更好地维护:

//Group variable or attribute
column_order   location,name,gender,age

//Property in QueryRecord
reorder_data   SELECT ${column_order} FROM FLOWFILE

它起作用了。谢谢ConvertRecord和QueryRecord都可以工作。所要做的就是在模式注册表中创建输入和输出Avro模式。转换记录是一种简单的方法。您可以在特定于输入文件的updateattribute上添加架构,并添加公共输出架构。但查询记录也像魅力一样工作。谢谢