如何在 Apache NiFi 中重新排序 CSV 列

How to reorder CSV columns in Apache NiFi

在 apache nifi 中重新排序 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 的新 属性,其值如下:

SELECT location,name,gender,age FROM FLOWFILE

那么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