1

在 apache nifi 中重新排序 csv 中的列。

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

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

4

2 回答 2

1

您应该可以使用 ConvertRecord 执行此操作,您将让 CSVRecordReader 的架构与输入的列(按顺序)匹配,并且 CSVRecordSetWriter 的输出架构将具有具有所需输出顺序的选定列的架构. 我还没有尝试过,但我相信这就是它的工作原理。

于 2019-10-03T16:01:40.590 回答
0

就我而言,因为我确信这些列将包含在所有 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

我想将列重新排序为,我在namedlocation,name,gender,age中设置了一个新属性,其值如下:QueryRecordreorder_data

SELECT location,name,gender,age FROM 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
于 2019-10-08T15:33:40.310 回答