【发布时间】:2020-01-30 14:06:50
【问题描述】:
在 apache nifi 中重新排序 csv 中的列。
输入 - 我有多个具有相同列但顺序不同的文件。
输出 - 抓取一些列并以相同的顺序存储。
【问题讨论】:
标签: apache-nifi apache-nifi-registry
在 apache nifi 中重新排序 csv 中的列。
输入 - 我有多个具有相同列但顺序不同的文件。
输出 - 抓取一些列并以相同的顺序存储。
【问题讨论】:
标签: apache-nifi apache-nifi-registry
您应该能够使用 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
【讨论】: